⼩程序使⽤STOMP(WebSocket)
版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。 blog.csdn/kinsxkins/article/details/79303843
⼩程序使⽤
⼩程序的WebSocket API跟⼀般浏览器的有点差别,存在⼀些限制。本⽂主要涉及⼩程序使⽤STOMP时注意事项。
基础
⼩程序需要维护两个状态:
服务器登录状态
第三⽅(即我们⾃⼰服务器)的登录状态
⼩程序使有wx.request()来发起请求,使⽤wx.connectSocket()创建WebSocket连接
真实环境需要在平台预设相关域名,必须使⽤TLS,即使⽤https、wss协议。开发调试时可以不限制。
使⽤STOMP与WebSocket遇到的问题
问题1: 连接成功后,很快⾃动断开
因为刚开始使⽤STOMP时,同事在⽹上到以下代码。出现问题我打开代码看了⼀下,刚看到肯定都觉得两个空⽅法很奇怪,原来不写会报错。打开stomp.js⼀看,很快到原因,setInterval是⽤来发⼼跳包的,⽽⼩程序没有window对象。
⽹络⽂章
var Stomp = require('../../utils/stomp.js').Stomp;
Stomp.setInterval = function () { }
Stomp.clearInterval = function () { }
var client = Stomp.over(ws);
stomp.js部分源码
if (typeof window !== "undefined" && window !== null) {
Stomp.setInterval = function (interval, f) {
return window.setInterval(f, interval);
};
Stomp.clearInterval = function (id) {
return window.clearInterval(id);
};
window.Stomp = Stomp;
} else if (!exports) {
写文章的小程序
self.Stomp = Stomp;
}
解决办法
Stomp.setInterval = function (interval, f) {
return setInterval(f, interval);
};
Stomp.clearInterval = function (id) {
return clearInterval(id);
};
问题2: 电脑开发时连接正常,⼿机远程调试时连接失败
⼀开始返回 401 UNAUTHORIZED,后来看到client⽇志提⽰draft handshake refused。
逐步排除域名限制、TLS证书有效性、Nginx配置、跨域问题。本应该先关注 401状态码的,通过服务器⽇志与后台调试,发现问题所在:client发起连接时没有在代码加上session标识,server需要它来验证的,所以握⼿时就失败。⽽在电脑开发时,websocket连接却⾃动带上了cookie,所以做成了⼿机与电脑的不⼀致。
解决办法,连接时加上session标识
url: 'wss://example.qq',
header:{
'Session-Id': 'xxxxxxxx'
},
success(): function(){
//
}
});
Nginx配置WebSocket
location /websocket {
proxy_pass 127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
另外,Nginx对外服务可以使⽤https,RealServer可以只⽤http
⼩程序websocket官⽅说明
⽰例代码
url: 'wss://example.qq',
data:{
x: '',
y: ''
},
header:{
'content-type': 'application/json'
},
protocols: ['protocol1'],
method:"GET"
})
阅读更多

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。