目前我们小程序开发中有遇到一个比较严重的关于 websocket 的问题。
当我们客户端在使用 websocket 的时候,遇到一个比较大的问题:当客户端收到 onClose 方法的时候,服务端并没有收到我们的 onClose 消息。下面是我们的示例代码。
function connectWebsocket(self,type) { let token = wx.getStorageSync( 'token' ); let socketUrl = `${URL.WEBSOCKET_HOST}/vfour/echo_once/?params=${token}`; var gameSocket = wx.connectSocket({ url: socketUrl }); socketFlow(type); //整个websocket流程 function socketFlow(type) { gameSocket.onOpen( function () { console.log( '-------Websocket onSocketOpen---------' ); }) gameSocket.onMessage( function (res) { console.log(res); console.log( '-------Websocket onSocketMessage---------' ); }) gameSocket.onClose( function (res) { gameSocket = null ; console.log( '-------Websocket onSocketClose---------' ); } console.log(self.$store.state.connectSocketNum, '-------------------' ,res); }) } } |
现在就导致比如客户端关闭 wifi, 然后服务端就不知道这个客户端已经断开了。
这个问题比较严重,希望可以协助解决。
确实有这个问题。除非知道用户什么时候切换网络,否则一旦变更网络,websocket就会断开。
客户端调用 gameSocket.close() 了?
是的,客户端主动调用 gameSocket.close()
但是服务端收不到客户端关掉的信息