NodeJs socket.io连接参数中传入查询字符串

2017年2月8日 · 37 字 · 1 分钟

socket.io一般会配合room进行消息转发,目前我的做法如下:

  • 服务端
io.on('connection',function(socket){
    socket.on('join',function(roomId){
        socket.join(roomId);
    });
});
  • 客户端
var socket = io('http://localhost:8888');
socket.on('connect',function(){
    socket.emit('join','live1');
});

可以发现客户端多出了一次emit操作。

查阅socket.io文档发现,在连接URL中是可以传入查询字符串的,服务端也可以获取到。更新后的代码如下:

  • 服务端
io.on('connection',function(socket){
      if (socket.handshake.query.roomId === undefined) {
        console.log('非法请求');
        return;
      }
      socket.join(socket.handshake.query.roomId);
});
  • 客户端
var socket = io('http://localhost:8888?roomId=live1');
socket.on('connect',function(){
});

这样就可以少一次emit操作,减少客户端以及服务端一部分压力。