【问题标题】:Extra params with socket.iosocket.io 的额外参数
【发布时间】:2011-09-11 04:54:22
【问题描述】:

如何在 socket.io 中通过连接发送额外参数?因此,当客户端连接时,它们会发送附加信息,而服务器端则以

的形式接收它
io.on('connection', function(client, param1, param2, param3) {
    // app code
}

【问题讨论】:

  • 为什么不让客户端在连接时发送"init" 消息?
  • 你不能。事件处理程序的签名不是用户定义的,库定义了它们。

标签: javascript node.js websocket socket.io


【解决方案1】:

这是一个应该有效的小技巧。首先,您创建自己的 Socket 客户端,在第一次连接时发送一条消息(包含您的所有附加信息)。

// Client side

io.MySocket = function(your_info, host, options){
  io.Socket.apply(this, [host, options]);
  this.on('connect', function(){
    this.send({__special:your_info});
  });
};
io.util.inherit(io.MySocket, io.Socket);

var my_info = {a:"ping"}
var socket  = io.MySocket(my_info);

然后在服务器端,您修改您的套接字以侦听特殊消息并在它发生时触发一个事件。

// Server side

var io = require('socket.io').listen(app);
io.on('connection', function(client){
  client.on('message', function(message){
    if (message.__special) {
      io.emit('myconnection', client, message.__special);
    }
  });
});

io.on('myconnection', function(client, my_info) {
  // Do your thing here
  client.on('message', ...); // etc etc
}

这是我用来将会话处理链接到我编写的包的 Socket.IO 的技术。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-25
    • 2023-03-12
    • 2014-05-20
    • 2015-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-06-26
    • 2012-11-16
    相关资源
    最近更新 更多