当在SERVER上接收到一个emit(即由客户端生成)时,回调函数是否在处理下一个emit之前完成?
示例:
_Layout.cshtml
我似乎在我的日志中获得此输出:
@RenderSection("testSection",required:false)
如您所见,START在到达END之前中断了另一个......
答案 0 :(得分:1)
Socket.io坚持基于事件循环的异步代码执行的基本原则,当具有特定名称的事件具有特定名称的事件时,每个 emit 和 on 回调都会被执行被发射和/或倾听。
由于这些是事件,因此除非在代码本身中进行此类安排,否则无法确保顺序执行
//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' });
});
上述代码可确保在客户端侦听'First_Event'之后,客户端上的'同步事件'事件执行。
另请注意事件1&无论客户端的呼叫顺序如何,都可以按任何顺序执行。
//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' });
答案 1 :(得分:0)
每次调用on()时都会调用回调函数。
NodeJS异步运行,是非阻塞I / O.因此,当第3个START完成处理时,控制台上会出现相应的END。
但Node.JS跳过代码,因为END仍在处理,调用回调并在控制台上打印下一个START,当等待的END完成处理时,它会显示在控制台上。
1 disconnect START - z0w0W4scKZ8o6c4nAAAm
1 disconnect END - z0w0W4scKZ8o6c4nAAAm
2 disconnect START - LLnSgRBV9NZ35mjrAAAk
3 disconnect START - djl3hyNvIwAhSEDbAAAn
2 disconnect END - LLnSgRBV9NZ35mjrAAAk
3 disconnect END - djl3hyNvIwAhSEDbAAAn