簡體   English   中英

我應該將服務器端偵聽器放在io還是socket.io的套接字上?

[英]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對象上放置發射/事件偵聽器?

我的基本程序流程如下:

  1. 客戶端套接字發出get_new_number
  2. 服務器從唯一套接字接收get_new_number
  3. 根據該唯一的套接字ID,它emits new_number
  4. 客戶端偵聽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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM