我应该将服务器端侦听器放在io或socket上以用于socket.io吗?

时间:2016-06-15 18:42:12

标签: javascript node.js express socket.io

如果我的express.js服务器设置如此:

var express = require('express');
var app = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var port = process.env.PORT || 8080;

server.listen(8080);

在其他地方我有一个io.on('connnect', function(socket){...});,我应该在io.connect(...)回调或io对象中的那个套接字上放置发射/事件监听器吗?

我的基本程序流程如下:

  1. 客户端套接字发出get_new_number
  2. 服务器从唯一套接字接收get_new_number
  3. 根据该唯一套接字ID,emits new_number
  4. 客户端侦听new_number并在触发时将数据记录到控制台中。
  5. 在服务器端,对于第2部分,我认为必须属于io.on('connect'...)函数,因此我可以访问socket.id以供日后使用:

    io.on('connect', function(socket){
        socket.on('get_new_number', function(){
            console.log('server got request for new number.');
            globalVarId = socket.id;        
        });
    });
    

    但是从那里,我应该在哪里向该独特的插座发出一个新号码?假设我保存socket.id然后仅发出它,我该怎么做?以下不起作用:

    io.on('connect', function(socket){
        //get_new_number stuff
        socket.to(globalVarId).emit('new_number', {number: someNumber});
    });
    

    我应该稍后再做io.to(globalVarId).emit...吗?

    编辑:就此而言,有没有办法将事件监听器放在io对象上,例如

    io.on('someEvent', function(socket){
        console.log('this socket did a thing, ', socket.id);
    });
    

1 个答案:

答案 0 :(得分:1)

您可以假设回调函数中的socket表示唯一的客户端/连接。

因此,当您想与该客户进行通信时,您可以使用socket.emit()

io.on('connect', function(socket) {
  socket.on('get_new_number', function() {
    console.log('server got request for new number.');
    //get_new_number stuff
    socket.emit('new_number', { number: someNumber });
  });
});

.to(...).emit(...)完全用于其他内容(向特定room发送消息)。