小程序使用webstocket

nginx配置 

location /wss {
     proxy_pass http://websocket;
     proxy_http_version 1.1;
     proxy_set_header Upgrade $http_upgrade;
     proxy_set_header Connection "Upgrade";
}

小程序端 

onLoad: function (options) {
    let that = this
    this.data.id = options.id

    this.gettoutong_info()

    console.log(this.data.ddd)
    var socketOpen = false
    var socketMsgQueue = []
    wx.connectSocket({
      url: 'wss://hr.18ycg.com/wss/'
    })

    wx.onSocketOpen(function (res) {
      socketOpen = true
      var user_info = wx.getStorageSync('userinfo')
      var user_info = wx.getStorageSync('userinfo')
      var data = { 'group': 'users', 'uid': user_info.user_id };
      sendSocketMessage(JSON.stringify(data))
    })
    wx.onSocketMessage(function (res) {
     let resc = JSON.parse(res.data)
      let message = { from: that.data.to_uid, to: that.data.uid, message: resc.message, sent: resc.sent}
      let messages = that.data.messages
      messages.push(message)
      that.setData({
        messages:messages,
        scrollTop: 768 + 50
      })
    })

    function sendSocketMessage(msg) {
      if (socketOpen) {
        wx.sendSocketMessage({
          data: msg
        })
      } else {
        socketMsgQueue.push(msg)
      }
    }
  },
  sends: function () {
    let message= this.data.message
    this.setData({
      message:''
    })
    return false
    var that = this;
    wx.request({
      url: app.globalData.URL + "/wapmember/ltserver",
      data: {
        message: message,
        uid:that.data.uid,
        to_uid:that.data.to_uid
      },
      header: {
        'content-type': 'application/json', // 默认值
        'Cookie': wx.getStorageSync('sessionkey')
      },
      success: function (res) {
        var message = res.data.data
        var messages = that.data.messages
        messages.push(message)

      
        that.setData({
          messages: messages,
          message:'',
          scrollTop: 768+50
        });
      }
    })
  },

 

 

抱歉,我无法编写代码,但是我可以提供一个关于如何使用Go编写WebSocket代理程序的示例: 1. 导入必要的库 以下是导入必要的库的示例代码: ```go import ( "log" "net" "net/http" "net/url" "github.com/gorilla/websocket" ) ``` 2. 建立WebSocket连接 以下是建立WebSocket连接的示例代码: ```go func handleWebSocket(w http.ResponseWriter, r *http.Request) { upgrader := websocket.Upgrader{} clientConn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Printf("Error upgrading to WebSocket: %v", err) return } defer clientConn.Close() remoteURL, err := url.Parse("ws://remote-host:remote-port") if err != nil { log.Printf("Error parsing remote URL: %v", err) return } remoteConn, _, err := websocket.DefaultDialer.Dial(remoteURL.String(), nil) if err != nil { log.Printf("Error dialing remote host: %v", err) return } defer remoteConn.Close() connPair := &websocketPair{client: clientConn, remote: remoteConn} connPair.start() } ``` 在此示例中,`handleWebSocket`函数被注册为HTTP处理程序。它升级HTTP连接为WebSocket连接,然后使用`websocket.DefaultDialer`建立到目标主机的WebSocket连接。最后,这两个连接将被连接在一起,允许双向通信。 3. 连接WebSocket连接 以下是连接WebSocket连接的示例代码: ```go type websocketPair struct { client *websocket.Conn remote *websocket.Conn stopChan chan struct{} } func (pair *websocketPair) start() { pair.stopChan = make(chan struct{}) go pair.copyMessages(pair.client, pair.remote) go pair.copyMessages(pair.remote, pair.client) } func (pair *websocketPair) copyMessages(src *websocket.Conn, dst *websocket.Conn) { defer src.Close() for { select { case <-pair.stopChan: return default: messageType, message, err := src.ReadMessage() if err != nil { log.Printf("Error reading message from %s: %v", src.RemoteAddr(), err) pair.stop() return } err = dst.WriteMessage(messageType, message) if err != nil { log.Printf("Error writing message to %s: %v", dst.RemoteAddr(), err) pair.stop() return } } } } func (pair *websocketPair) stop() { close(pair.stopChan) } ``` 在此示例中,`websocketPair`结构代表连接一对websocket连接。`start`方法启动并开始从两个连接之间复制消息的两个goroutine。`stop`方法用于停止这些goroutine。 4. 注册WebSocket处理程序 以下是注册WebSocket处理程序的示例代码: ```go func main() { http.HandleFunc("/ws", handleWebSocket) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatalf("Error starting server: %v", err) } } ``` 在此示例中,HTTP处理程序被注册为`/ws`路径上的WebSocket处理程序,并使用`ListenAndServe`函数启动HTTP服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值