750660
感觉不是很理解nodejs事件监听的实现原理,它的实现和进程或线程有关系吗?本来是想用nodejs实现像java一样的TCP服务器,看到java代码中对新连接成功的socket,都会开一个新的线程来处理socket的接收信息;而在nodejs中,感觉对每个连接成功的socket都会注册一个事件监听事件,会对每个socket监听,感觉已经用不到线程来处理接收信息,请大家指教,多谢!!!
感觉不是很理解nodejs事件监听的实现原理,它的实现和进程或线程有关系吗?本来是想用nodejs实现像java一样的TCP服务器,看到java代码中对新连接成功的socket,都会开一个新的线程来处理socket的接收信息;而在nodejs中,感觉对每个连接成功的socket都会注册一个事件监听事件,会对每个socket监听,感觉已经用不到线程来处理接收信息,请大家指教,多谢!!!
为了回答你的这个问题,我查阅了一些资料:
从系统提供的回调函数来说,这些回调函数会被注册在Node的事件循环中。在时间循环中异步的处理IO事件,其中IO时间分为:
事件处理完毕后,触发一开始注册的回调函数。
这样就实现了你在问题中提出的事件监听。
就例如
socket.on('data',function(){
});
这里的function就会被注册在事件循环中,i/o返回时将调用这里的function.
参考资料:https://github.com/yjhjstz/deep-into-node/blob/master/chapter5/chapter5-1.md
观察者模式吗 来自 牛读
@yuk320 我倒还没试过建立一个长连接,只是在socket通信时,感觉会为每个连接成功的socket注册监听事件,事件监听也是一直都在,而不是像java中需要有一个线程来维护处理消息,这个事件监听的实现原理是不是也是需要线程来维护?
@q86002618 也就是说这些I/O事件的底层实现,也是有某个线程来维护
实际上 建立长连接时(比如websocket)的时候 nodejs 也是要监听这个线程的,注册的那些事件是在当事件触发时,做相应逻辑。