gpt4 book ai didi

javascript - socket.io SERVER 是否发出回调阻塞?

转载 作者:搜寻专家 更新时间:2023-10-31 23:52:40 24 4
gpt4 key购买 nike

当在服务器上接收到发射(即由客户端生成)时,回调函数是否在处理下一个发射之前完成?

例子:

socket.on('disconnect', function() {
log('disconnect START - ' + socket.id);

...
...
Do some stuff
...
...

log('disconnect END - ' + socket.id);
});

我似乎在我的日志中得到了这个输出:

disconnect START - z0w0W4scKZ8o6c4nAAAm
disconnect END - z0w0W4scKZ8o6c4nAAAm
disconnect START - LLnSgRBV9NZ35mjrAAAk
disconnect START - djl3hyNvIwAhSEDbAAAn
disconnect END - LLnSgRBV9NZ35mjrAAAk
disconnect END - djl3hyNvIwAhSEDbAAAn

如您所见,在到达 END 之前,START 会中断另一个...

最佳答案

Socket.io 坚持基于事件循环的异步代码执行的基本原则,当具有特定名称的事件发生时,您的每个 emiton 回调都会执行被发射和/或收听。

并且由于这些是事件,因此无法保证顺序执行,除非在代码本身中做出此类安排

  //Server
//1. Emit this event
socket.emit('First_Event', { hello: 'world' });

//2. Listen to this event
socket.on('Synchronous-Event', function (data) {
console.log(data);
});

//Client
//1. Listen to this event
socket.on('First_Event', function (data) {
console.log(data);
//2.Then emit this event
socket.emit('Synchronous-Event', { my: 'data' });
});

以上代码确保客户端的'Synchronous-Event'事件在客户端监听到'First_Event'之后执行。

另请注意,事件 1 和 2 可以按任何顺序执行,无论它们在客户端的调用顺序如何。

 //For Example **alternate** asynchronous event
//Client
//1. Listen to this event
socket.on('First_Event', function (data) {
console.log(data);
});
//2.Emit this event async*
socket.emit('Synchronous-Event', { my: 'data' });

关于javascript - socket.io SERVER 是否发出回调阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37878380/

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