如果我的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对象中的那个套接字上放置发射/事件监听器吗?
我的基本程序流程如下:
get_new_number
。 get_new_number
。 emits
new_number
new_number
并在触发时将数据记录到控制台中。 在服务器端,对于第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);
});
答案 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发送消息)。