按 TCP 或者 HTTP, 两个服务监听同一端口是会报错的,
但 Socket.IO 却可以直接监听 Express 服务器的同一端口,
具体原因是什么?
WebSockets 是基于 HTTP 实现, 是否相关?
按 TCP 或者 HTTP, 两个服务监听同一端口是会报错的,
但 Socket.IO 却可以直接监听 Express 服务器的同一端口,
具体原因是什么?
WebSockets 是基于 HTTP 实现, 是否相关?
按理说TCP与HTTP之间是不能用「或者」的。
在OSI模型中,TCP是第四层传输层的协议,HTTP是第七层应用层的协议。
你的问题可以这样理解,socket.io 和 Express 都在使用node正在监听的端口来分别处理请求,而不是分别监听端口。
因为 WebSocket 是基于 HTTP 1.1 的一个功能,它本身是依赖 HTTP 的(使用 101 状态码来切换协议)。Express 应该知道自己已经监听了那个端口,所以没有再尝试监听(bind(2)),而只是给那个端口来的请求注册了针对 HTTP WebSocket 请求的处理方法。
5 回答4.8k 阅读✓ 已解决
4 回答2.5k 阅读✓ 已解决
5 回答3.6k 阅读
2 回答1.7k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
3 回答2k 阅读
5 回答1.9k 阅读
应该是两个程序监听一个端口会报错。
websocket, http 都是基于tcp实现的。websocket 的连接请求都是用的http。websocket和http是在一个层面上的东西。比如在Go中处理websocket请求:
路由:
处理action:
和普通的http请求处理很类似,也是使用GET方法,Node的原理也是一样的。
另外一个端口可以接受多个tcp请求。