据此: HTTP升级头请求服务器将应用层协议从HTTP切换到WebSocket协议 。 客户端握手build立了IE10和服务器之间的HTTP-on-TCP连接。 在服务器返回其101响应之后,应用层协议从HTTP切换到使用先前build立的TCP连接的WebSocket。 在这一点上, HTTP完全没有了 。 使用轻量级的WebSocket有线协议,消息现在可以随时由任一端点发送或接收。 所以,我的理解是,在第一个客户端与服务器握手后,服务器的80端口将被WebSocket协议垄断 。 HTTP不再在80端口上工作 。 那么第二个客户端怎么会和服务器交换握手呢? 毕竟WebSocket握手是HTTP格式的。 ADD 1 感谢所有迄今为止的答案。 他们真的很有帮助。 现在我明白,同一个服务器的80端口是由多个TCP连接共享的。 而且这种共享是完全可以的,因为Jan-Philip Gehrcke指出TCP连接是由一个5元组元素来标识的。 我想补充一些想法。 WebSocket和HTTP都只是应用程序级别的协议。 通常他们都依赖TCP协议作为传输。 为什么select80端口? WebSocketdevise有意select服务器端口80进行握手和后续通信 。 我认为devise人员希望使WebSocket通信看起来像 从传输层面(即服务器端口号仍为80)的普通HTTP通信。 但根据jfriend00的回答,这个伎俩并不总是欺骗networking基础设施。 协议如何从HTTP转换到WebSocket发生? 从RFC 6455 – WebSocket协议 基本上,它打算尽可能接近暴露原始的TCP到脚本在给定的Web约束下。 它的devise也使得它的服务器可以与HTTP服务器共享一个端口,因为它的握手是一个有效的HTTP升级请求。 人们可以从概念上使用其他协议来build立客户端 – 服务器消息传递,但是WebSockets的目的是提供一个相对简单的协议,它可以与HTTP共存并部署HTTP基础设施(如代理服务器),并且与安全的TCP在给定安全考虑的情况下与这样的基础设施一起使用,有针对性的添加以简化使用并简单简单的事情(例如添加消息语义)。 所以我觉得我错了下面的说法: 握手请求模仿 HTTP请求而不是后面的通信。 握手请求到达端口80上的服务器。 因为它是80端口,服务器将使用HTTP协议处理它。 这就是为什么WebSocket握手请求必须是HTTP格式。 如果是这样,我认为HTTP协议必须被修改/扩展来识别那些WebSocket特定的东西。 否则,它不会意识到它应该产生 WebSocket协议。 我认为应该这样理解: WebSocket通信从客户端到服务器的有效 HTTP请求开始。 所以服务器遵循HTTP协议来parsing握手请求,并确定协议变更请求。 它是切换协议的服务器。 […]