go语言使用websocket

go后端代码

安装模块

go 复制代码
go get "github.com/gorilla/websocket"

main.go代码如下:

go 复制代码
package main

import (
	"fmt"
	"github.com/gorilla/websocket"
	"net/http"
)

var upgrader = websocket.Upgrader{
	CheckOrigin: func(r *http.Request) bool {
		// 允许所有来源的WebSocket连接
		return true
	},
}

func main() {
	http.HandleFunc("/ws", wsHandle)
	err := http.ListenAndServe(":9009", nil)
	if err != nil {
		fmt.Println(err)
	}
}

func wsHandle(w http.ResponseWriter, r *http.Request) {
	// 升级为ws
	conn, err := upgrader.Upgrade(w, r, nil)
	if err != nil {
		fmt.Println(err)
		return
	}
	defer conn.Close()
	fmt.Println("连接建立成功")
	// 循环监听客户端传来的消息
	for {
		// 读取客户端消息
		messageType, p, err := conn.ReadMessage()
		if err != nil {
			fmt.Println(err)
			return
		}

		// 处理消息
		fmt.Println("接收到客户端的消息为: ", string(p))

		// 发送消息给客户端
		err = conn.WriteMessage(messageType, p)
		//err = conn.WriteMessage(messageType, []byte("我是服务器返回的消息"))
		if err != nil {
			fmt.Println(err)
			return
		}
	}
}

运行项目(右键运行)

项目运行地址为: ws://127.0.0.1:9009/ws

前端测试demo页面代码如下

也可以使用这个网站测试webSocket代码:http://www.websocket-test.com/

html 复制代码
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebSocket 连接测试</title>
<style>
  #log {
    margin-top: 20px;
    border: 1px solid #ccc;
    padding: 10px;
    height: 500px;
    overflow-y: scroll;
  }
</style>
</head>
<body>

<h2>WebSocket 连接测试页面</h2>

<button id="connect">连接</button>
<input type="text" autocomplete="off" id="address" value="ws://127.0.0.1:9009/ws" placeholder="输入webSocket地址...">
<button id="disconnect" disabled>断开连接</button>
<button id="send" disabled>发送消息</button>

<input type="text" autocomplete="off" id="message" placeholder="输入消息...">
<div id="log"></div>

<script>
  var ws;
  var log = document.getElementById('log');

  function logMessage(message) {
    var p = document.createElement('p');
    p.textContent = message;
    log.appendChild(p);
    // 确保日志始终显示在底部
    log.scrollTop = log.scrollHeight;
  }

  document.getElementById('connect').addEventListener('click', function() {
    if ('WebSocket' in window) {
      ws = new WebSocket(document.getElementById('address').value);
      ws.onopen = function() {
        logMessage('已连接到WebSocket服务器。');
        document.getElementById('connect').disabled = true;
        document.getElementById('disconnect').disabled = false;
        document.getElementById('send').disabled = false;
      };
      ws.onmessage = function(event) {
        logMessage('接收到消息:' + event.data);
      };
      ws.onclose = function(event) {
        if (event.wasClean) {
          logMessage('连接已干净地关闭。');
        } else {
          logMessage('连接已断开。');
        }
        logMessage('代码:' + event.code + ', 原因:' + event.reason);
        document.getElementById('connect').disabled = false;
        document.getElementById('disconnect').disabled = true;
        document.getElementById('send').disabled = true;
      };
      ws.onerror = function(error) {
        logMessage('WebSocket错误:' + JSON.stringify(error));
      };
    } else {
      // 浏览器不支持WebSocket
      logMessage('你的浏览器不支持WebSocket。');
    }
  });

  document.getElementById('disconnect').addEventListener('click', function() {
    ws.close();
  });

  document.getElementById('send').addEventListener('click', function() {
    var message = document.getElementById('message').value;
    ws.send(message);
    logMessage('发送消息:' + message);
  });
</script>

</body>
</html>
相关推荐
warpdrivelabs33 分钟前
Codex 开源 harness 全面了解
开发语言·人工智能
丰锋ff5 小时前
基于 Qt 的智能门禁系统(二)
开发语言·qt
fpcc5 小时前
跟我学C++中级篇——编译期的条件选择
开发语言·c++
SomeB1oody5 小时前
【RustyML入门】6.3. 并行归约
开发语言·后端·机器学习·rust·教程
mqiqe6 小时前
AgentScope Java 2.0 协议集成全景解析:A2A、AG-UI、Agent Protocol 三大开放协议实战指南
java·开发语言·ui
lzhdim6 小时前
12、JavaScript常见的内存泄露问题 - JavaScript学习系列文章
开发语言·前端·javascript·学习·ecmascript
脉动数据行情6 小时前
Java 实现台股 TWSE/TPEx 行情采集(个股 + K 线)
java·开发语言·twse·tpex·台股
爱学习的小邓同学7 小时前
Golang --- (1)第一个Golang程序
开发语言·后端·golang
zx_741484818 小时前
【Python 入门】面向对象基础:类、对象、成员变量与构造方法
开发语言·python
liangshanbo12159 小时前
虚拟列表深度面试题整理
java·开发语言·前端