Sys*_*min 7 javascript c# sockets tcp websocket
我想了解更多关于websocket及其内部实现的信息.但仍然无法理解一些事情.我尝试使用谷歌搜索进行深入解释,但大多数只是给出了高级概述.以下是我的疑惑
1.据我所读,默认情况下,Web套接字服务器(C#/ C++实现)使用端口80.虽然我们可以使用任何端口,但我们最好使用端口80,因为我们不会遇到任何防火墙问题.如果是这样,我们如何在同一个端口(80)上运行web服务器和Web套接字服务器?
2.假设Web套接字服务器在端口81上运行,Web服务器在端口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
Run Code Online (Sandbox Code Playgroud)为什么他们使用当前在大多数浏览器中实现的相同websocket接口来发出与给定端口的直接TCP/IP连接,而没有任何HTTP内容?
3. 对于从客户端/服务器发送/接收的数据,是否存在数据包大小限制或数据/缓冲区限制?如果是这种情况,我们是否需要构建数据框并自行处理?
4. websocket服务器是否总是需要是一个单独的服务/流程?将来网络服务器(IIS,apache)将包括在其进程空间内托管Web套接字服务器的支持吗?
通过使用 HTTP 兼容的握手,您可以将 WebSocket 处理程序集成到您的 Web 服务器中,或者只是让 Web 服务器将 WebSocket 连接转发到专用的 WebSocket 服务器。
WebSocket 握手使用 HTTP 兼容握手,允许在同一端口上轻松处理两种协议,并且允许现有防火墙配置更轻松地支持 WebSocket 流量。此外,在 HTTP 请求的上下文中防止跨端脚本攻击是很容易理解的,因此 WebSocket 充分利用了这些知识。即使在建立连接之后,WebSocket也不是原始套接字连接。它是基于消息的协议,因此需要成帧。此外,从客户端(浏览器)发送到服务器时,框架会被屏蔽,以减轻对行为不当的代理/缓存/中介中理论上的漏洞的担忧。
协议本身对消息大小没有限制。一条消息可以被分割成多个帧。帧大小有协议限制,但为 2^64 字节。实际帧大小限制会更小,具体取决于客户端/服务器实现。如果您要发送多兆字节的单条消息,您可以考虑更改应用程序以使用较小的消息,以最大限度地提高跨浏览器和跨服务器支持。
WebSocket 处理绝对可以集成到 Web 服务器中,这在很大程度上是工作组设想的场景。例如,考虑pywebsocket,它设计为独立运行或作为 Apache 中的 mod_python 模块运行。另一个例子,ASP.NET 4.5 和 IIS 8 将内置对 WebSockets 的支持。
| 归档时间: |
|
| 查看次数: |
2183 次 |
| 最近记录: |