tsw.jstsw.js

#WebSocket

TSW已内置WebSocket

WebSocket路由

只需在config配置文件里实现config.wsRouter

编写处理模块

//需实现的function

exports.onConnection = function(ws){//WebSocket连接建立的回调函数
    //ws.send('xxx');
    //ws.close();
};
exports.onMessage = function(ws, message) {//收到消息的回调函数

};
exports.onClose = function(ws, code, reason) {//WebSocket连接关闭时的处理函数

};
exports.onError = function(ws, err) {//WebSocket连接出错时的处理函数

};

##ws对象属性详解

  • ws.upgradeReq -- node http连接中的request对象
    • upgradeReq -- object ws扩展属性
      • upgradeReq.GET -- object WebSocket请求get参数
      • upgradeReq.headers -- object WebSocket请求cookie对象
      • upgradeReq.REQUEST -- object WebSocket请求url解析后的对象
      • upgradeReq.REQUEST.pathname -- string WebSocket请求的pathname
  • ws.readyState -- number WebSocket连接的状态,值为数字,只有readyState等于1时才能send消息
    • 0 -- number WebSocket连接还没有open
    • 1 -- number WebSocket连接已经open,并且可以收发消息了
    • 2 -- number WebSocket连接关闭中
    • 3 -- number WebSocket连接已关闭
  • ws.send('xxx') -- 发送消息,支持二进制数据
  • ws.close() -- 关闭WebSocket连接

加密WebSocket

http有加密通信https,同样,ws也有加密通信wss,无需单独部署,直接复用https证书

WebSocket跨机器跨进程消息转发

每个woker都监听了一个私有port,从global.TSW_HTTP_WORKER_PORT得到,利用私有port转发消息

注意事项

如果TSW前面有类nginx接入层,需要在转发时保持Upgrade透传

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";

##浏览器端连接demo

const ws = new WebSocket('wss://tswjs.org/hello/world?aaa=xxx');
ws.onopen = function() {//连接建立
    ws.send('xxx');
    ws.close();
};
ws.onmessage = function(message) {};
ws.onclose = function() {};

WEBSOCKET跨域

TSW中的WebSocket默认支持跨域请求,如果需要拒绝跨域请求,需要在config配置文件里实现config.allowWebSocketOriginHost