gpt4 book ai didi

javascript - 我应该将服务器端监听器放在 io 或 socket.io 的套接字上吗?

转载 作者:行者123 更新时间:2023-12-03 06:43:33 25 4
gpt4 key购买 nike

如果我有我的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来自独特的 socket 。
  3. 根据该唯一的套接字 ID,它 emits new_number
  4. 客户端监听 new_number并在触发时将数据记录到控制台。

在服务器端,对于第 2 部分,我相信必须是 io.on('connect'...) 内的 a函数,这样我就可以访问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(...) 完全用于其他用途(向特定 room 发送消息)。

关于javascript - 我应该将服务器端监听器放在 io 或 socket.io 的套接字上吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37843366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com