问题描述
如题,网上貌似没有搜到太多的答案,讲道理不是一个进程被一个端口号识别么,服务器的ip和端口也应该是固定的。
另外像node.js这种,每次新的连接过来的时候是一个event,怎么去识别哪一个event属于一个client?
问题解答
回答1:自 BSD Socket 之后,网络端口对于应用程序员而言就是文件,操作系统管理起来也很像文件,文件的操作权限是父子进程共享的,如果在fork()前就拥有了那个 socket 的话,那fork()后的子进程也就可以使用相同端口。新的连接不存在你说的这个问题吧,应该是已有连接发送数据如何判断这个数据是哪个连接发来的吧,这个底层是由 IP 协议实现的,操作系统据此也可以反推出来的数据包来自于那个连接,nodejs 特殊的地方在于采用了异步的方式,而这个是由比如 epoll 这样的操作系统提供的操作来实现的,操作系统会告诉 nodejs 新来的数据是来自哪个连接的,然后 nodejs 再做处理。