如何在node.js + socket.io中创建自定义客户端事件

Ala*_*ain 4 javascript node.js socket.io

我刚开始使用node.js,从目前为止我所知道的,客户端与服务器通信的方式是:

//Client Code 1
var iosocket = io.connect();
iosocket.on('connect', function () {
   iosocket.send("Here's some info");
});
Run Code Online (Sandbox Code Playgroud)

收到"消息"事件后服务器会发现这种情况:

//Server Code 1
var socketio = require('socket.io');
var io = socketio.listen(server);
io.sockets.on('connection', function (client) {    
    client.on('message', function(msg) {
        //msg== "Here's some info"
    }
});
Run Code Online (Sandbox Code Playgroud)

现在我希望客户端能够提供几个不同的事件,例如:

//Server Code 2
client.on('buttonClicked', function() { ...
client.on('nameChanged', function(newName) { ...
Run Code Online (Sandbox Code Playgroud)

但我无法弄清楚如何.我可以使用我所拥有的部分找到的唯一解决方案是发回消息,但让它们包含键值对信息:

//Server Code 3
client.on('message', function(msg) {
   kvp = message.split(',');
   if( kvp[0] == 'buttonClicked' )
      ...
   else if( kvp[0] == 'nameChanged' )
      ...
}
Run Code Online (Sandbox Code Playgroud)

但我确信有一种正确的方法,我还没有在任何例子中看到过.我希望有类似于服务器如何生成它想要使用的任何事件:

//Server Code 4
io.sockets.emit('serverCustomEvent', eventData);
Run Code Online (Sandbox Code Playgroud)

客户使用以下方式监控:

//Client Code 4
iosocket.on('serverCustomEvent', function(data) {
    //process data
});
Run Code Online (Sandbox Code Playgroud)

有人能指出我正确的方向吗?

Mus*_*usa 8

您可以emit在客户端上使用将自定义消息发送到服务器.

iosocket.emit('serverCustomEvent', data);
Run Code Online (Sandbox Code Playgroud)

并在服务器上

io.sockets.on('connection', function(socket) {
    socket.on('serverCustomEvent', login);
});
Run Code Online (Sandbox Code Playgroud)