[英]Should I put server-side listeners on io or socket for 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對象上放置發射/事件偵聽器?
我的基本程序流程如下:
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);
});
您可以假定回調函數中的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(...)
完全用於其他用途(向特定房間發送消息)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.