我正在尝试了解有关 websocket 及其内部实现的更多信息。但仍然无法理解一些事情。我尝试使用谷歌搜索以获得深入的解释,但其中大多数只是提供高级概述。以下是我的疑惑
1.根据我的阅读,web socket服务器(C#/C++实现)默认使用80端口。虽然我们可以使用任何端口,但我们最好使用80端口,因为我们不会有任何防火墙问题。如果是这样,我们应该如何在同一个端口(80)上同时运行 Web 服务器和 Web 套接字服务器?
2.假设 web socket 服务器运行在 81 端口,webserver 运行在 80 端口。
所以当浏览器发出初始握手 HTTP 请求 (Upgrade: websocket) 时,这个请求会发送到 81 端口。对吧?如果是这样,这个请求(见下文)与 HTTP 协议没有任何关系。但是我们仍然使用 HTTP 协议头。为什么?
GET /mychat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== Sec-WebSocket-Protocol: chat Sec-WebSocket-Version: 13 Origin: http://example.com
为什么他们使用当前在大多数浏览器中实现的相同 websocket 接口来发出与给定端口的直接 TCP/IP 连接,而没有任何 HTTP 内容?
3. 从客户端/服务器发送/接收的数据是否有任何数据包大小限制或数据/缓冲区限制?如果是这样,我们是否需要将数据框起来并自己处理?
4. websocket 服务器是否总是需要一个单独的服务/进程?将来网络服务器(IIS、apache)是否会支持在其进程空间内托管网络套接字服务器?