话不多说,直接上运行结果
后端:
前端:
上代码:
首先运行后端代码:
package main
import (
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
"log"
"net/http"
)
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
CheckOrigin: func(r *http.Request) bool {
return true
},
}
func handleWebSocket(c *gin.Context) {
conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {
log.Println("Failed to upgrade connection:", err)
return
}
defer conn.Close()
for {
_, message, err := conn.ReadMessage()
if err != nil {
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
log.Printf("Connection closed with error code: %d", err)
}
break
}
log.Printf("Received message: %s", message)
// 返回固定的消息 "true" 给客户端
if err := conn.WriteMessage(websocket.TextMessage, []byte("true")); err != nil {
log.Println("Failed to write message:", err)
break
}
}
}
func main() {
r := gin.Default()
r.GET("/ws", handleWebSocket)
log.Println("Starting server on :8081")
err := r.Run(":8081")
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}
然后在微信小程序中:在utils文件夹中新建一个websocket.js文件:
// websocket.js
// 定义WebSocket连接函数,接受一个对象参数,其中包含了WebSocket连接的配置信息以及要发送的消息
function connectWebSocket(params) {
let socket = wx.connectSocket({
url: params.url, // 使用传入的url
header: params.header // 使用传入的header
});
// 监听WebSocket连接打开事件
socket.onOpen(() => {
console.log('WebSocket连接已打开');
// 连接打开后发送消息
sendMessage(socket, params.message);
});
// 监听WebSocket接收到服务器的消息事件
socket.onMessage((message) => {
let receivedMsg = JSON.parse(message.data);
// 在这里处理接收到的消息
console.log('接收到的消息:', receivedMsg);
});
// 监听WebSocket错误事件
socket.onError((error) => {
console.error('WebSocket错误:', error);
});
// 监听WebSocket关闭事件
socket.onClose((res) => {
console.log('WebSocket 连接已关闭', res);
});
return socket;
}
// 定义发送消息函数
function sendMessage(socket, msg) {
if (socket && socket.OPEN === 1) {
// 编码要发送的消息
let encodedMsg = JSON.stringify(msg);
socket.send({
data: encodedMsg, // 使用编码后的消息
success: () => console.log('消息发送成功'),
fail: (error) => console.error('消息发送失败', error)
});
} else {
console.log('WebSocket连接未打开');
}
}
// 导出函数,使其它文件可以引用
module.exports = {
connectWebSocket: connectWebSocket
};
接着调用这个文件:
Page({
onLoad: function() {
// 引入websocket.js文件
const WebSocketUtil = require('../../../utils/websocket.js');
// 定义包含WebSocket连接配置信息以及要发送的消息的对象
let params = {
url: 'ws://localhost:8081/ws',
header: {
'content-type': 'text'
},
message: {
message1: '这是第一条消息',
message2: '这是第二条消息',
message3: '这是第三条消息'
}
};
// 调用WebSocket连接函数,传入对象参数
WebSocketUtil.connectWebSocket(params);
},
// 其他页面逻辑...
});