当前位置:   article > 正文

微信小程序与golang后端实现websocket通讯

微信小程序与golang后端实现websocket通讯

话不多说,直接上运行结果

后端:

前端:

上代码:

首先运行后端代码:

  1. package main
  2. import (
  3. "github.com/gin-gonic/gin"
  4. "github.com/gorilla/websocket"
  5. "log"
  6. "net/http"
  7. )
  8. var upgrader = websocket.Upgrader{
  9. ReadBufferSize: 1024,
  10. WriteBufferSize: 1024,
  11. CheckOrigin: func(r *http.Request) bool {
  12. return true
  13. },
  14. }
  15. func handleWebSocket(c *gin.Context) {
  16. conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
  17. if err != nil {
  18. log.Println("Failed to upgrade connection:", err)
  19. return
  20. }
  21. defer conn.Close()
  22. for {
  23. _, message, err := conn.ReadMessage()
  24. if err != nil {
  25. if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
  26. log.Printf("Connection closed with error code: %d", err)
  27. }
  28. break
  29. }
  30. log.Printf("Received message: %s", message)
  31. // 返回固定的消息 "true" 给客户端
  32. if err := conn.WriteMessage(websocket.TextMessage, []byte("true")); err != nil {
  33. log.Println("Failed to write message:", err)
  34. break
  35. }
  36. }
  37. }
  38. func main() {
  39. r := gin.Default()
  40. r.GET("/ws", handleWebSocket)
  41. log.Println("Starting server on :8081")
  42. err := r.Run(":8081")
  43. if err != nil {
  44. log.Fatal("ListenAndServe: ", err)
  45. }
  46. }

然后在微信小程序中:在utils文件夹中新建一个websocket.js文件:

  1. // websocket.js
  2. // 定义WebSocket连接函数,接受一个对象参数,其中包含了WebSocket连接的配置信息以及要发送的消息
  3. function connectWebSocket(params) {
  4. let socket = wx.connectSocket({
  5. url: params.url, // 使用传入的url
  6. header: params.header // 使用传入的header
  7. });
  8. // 监听WebSocket连接打开事件
  9. socket.onOpen(() => {
  10. console.log('WebSocket连接已打开');
  11. // 连接打开后发送消息
  12. sendMessage(socket, params.message);
  13. });
  14. // 监听WebSocket接收到服务器的消息事件
  15. socket.onMessage((message) => {
  16. let receivedMsg = JSON.parse(message.data);
  17. // 在这里处理接收到的消息
  18. console.log('接收到的消息:', receivedMsg);
  19. });
  20. // 监听WebSocket错误事件
  21. socket.onError((error) => {
  22. console.error('WebSocket错误:', error);
  23. });
  24. // 监听WebSocket关闭事件
  25. socket.onClose((res) => {
  26. console.log('WebSocket 连接已关闭', res);
  27. });
  28. return socket;
  29. }
  30. // 定义发送消息函数
  31. function sendMessage(socket, msg) {
  32. if (socket && socket.OPEN === 1) {
  33. // 编码要发送的消息
  34. let encodedMsg = JSON.stringify(msg);
  35. socket.send({
  36. data: encodedMsg, // 使用编码后的消息
  37. success: () => console.log('消息发送成功'),
  38. fail: (error) => console.error('消息发送失败', error)
  39. });
  40. } else {
  41. console.log('WebSocket连接未打开');
  42. }
  43. }
  44. // 导出函数,使其它文件可以引用
  45. module.exports = {
  46. connectWebSocket: connectWebSocket
  47. };

接着调用这个文件:

  1. Page({
  2. onLoad: function() {
  3. // 引入websocket.js文件
  4. const WebSocketUtil = require('../../../utils/websocket.js');
  5. // 定义包含WebSocket连接配置信息以及要发送的消息的对象
  6. let params = {
  7. url: 'ws://localhost:8081/ws',
  8. header: {
  9. 'content-type': 'text'
  10. },
  11. message: {
  12. message1: '这是第一条消息',
  13. message2: '这是第二条消息',
  14. message3: '这是第三条消息'
  15. }
  16. };
  17. // 调用WebSocket连接函数,传入对象参数
  18. WebSocketUtil.connectWebSocket(params);
  19. },
  20. // 其他页面逻辑...
  21. });

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/264110
推荐阅读
相关标签
  

闽ICP备14008679号