-
官方文档说明:入口
-
WebSocket连接的链接只支持
wss
加密方式,且只能用域名
的方式 -
该域名还要在微信公众平台的小程序中登记才能使用,开发->开发管理->服务器域名->修改
-
该域名要和https使用的一致
-
以域名地址:dtu.aabbcc.cn为例
nodejs搭建WebSocket服务器
无需传入服务器地址,底层会自动映射到公网ip
const WebSocket = require('ws');
const server = new WebSocket.Server({ port: 3000 });
consoles.log('WebSocket服务器已启动');// 当有客户端连接时,监听其消息
server.on('connection', (client) => {consoles.log('有客户端连接:', client._socket.remoteAddress);// 收到客户端消息client.on('message', (data) => {try {const decoder = new TextDecoder();const text = decoder.decode(data);message = JSON.parse(text);consoles.log('收到客户端消息:', message);} catch (error) {consoles.log('wss message error', error)}});// 当客户端断开连接时,从客户端映射关系中删除client.on('close', () => {consoles.log('客户端断开连接:', client._socket.remoteAddress);clientsInforList.delete(client);});
});
WebSocket默认是不带加密传输的,接下来可以通过代理服务器配置路由进行加密传输,即ws变成wss。
Apache配置参数
系统:ubuntu
配置文件:
- 加密路由配置:
\etc\apache2\sites-enabled\default-ssl.conf
<VirtualHost _default_:443>ServerName wss://dtu.aabbcc.cnProxyPass /wss ws://localhost:3000ProxyPassReverse /wss ws://localhost:3000</VirtualHost>
- 不加密路由配置:
\etc\apache2\sites-enabled\000-default.conf
<VirtualHost *:80>ServerName ws://dtu.aabbcc.cnProxyPass /wss ws://localhost:3000ProxyPassReverse /wss ws://localhost:3000
</VirtualHost>
修改完记得重启Apache
sudo service apache2 restart
微信小程序端连接
wx.connectSocket({url: 'wss://dtu.aabbcc.cn/wss',header:{'content-type': 'application/json','Access-Control-Allow-Origin': '*',},success: function (res) {console.log('WebSocket连接成功', res)},fail: function (res) {console.log('WebSocket连接失败:', res)}})wx.onSocketOpen(function() {console.log('WebSocket连接已打开')wx.sendSocketMessage({data: JSON.stringify({type: 'register',id: 'wx-23423453'})})})wx.onSocketError(function(res) {console.log('WebSocket连接打开失败:', res)})wx.onSocketMessage(function(res) {console.log('WebSocket onSocketMessage:', res)var data = JSON.parse(res.data)})wx.onSocketClose(function() {console.log('WebSocket连接已关闭')})