HTTP TCP 和 WEB 套接字
Posted
技术标签:
【中文标题】HTTP TCP 和 WEB 套接字【英文标题】:HTTP TCP AND WEB SOCKET 【发布时间】:2015-01-01 17:47:57 【问题描述】:如果我错了,请纠正我。 在 Web 应用程序中使用 HTTP 协议的优点之一是最大限度地减少客户端之间的服务器资源共享。即使有数千个同时连接,由于 HTTP 的这种无状态特性,服务器上的负载也会大大降低。
另一方面,如果连接是有状态的(例如 TCP),那么服务器将需要为数千个请求打开并保持连接处于活动状态,从而导致服务器上的巨大负载。因此,为什么将 HTTP 设为无状态以在 Web 应用程序中工作是完全合理的。
我的困惑是关于 Web 套接字,如果 Web 套接字使用 TCP 在客户端和服务器之间进行实时通信,那么对于任何基于 Web 的实时应用程序来说,它怎么可能是一个不错的选择(考虑到服务器上的负载)? web socket服务器如何处理多个连接的负载?
【问题讨论】:
【参考方案1】:HTTP 操作不一定是轻量级或短暂的;有许多 Web 应用程序在服务表面上无状态的请求时会消耗大量资源。根据场景,Web 套接字实际上可能比 HTTP 性能更高 - 新的 HTTP 连接和服务器端对响应的隔离处理可能比连接客户端到的长寿命套接字昂贵得多一个服务器进程,它能够在没有新连接和数据编组开销的情况下传输数据。这实际上取决于数据的类型 - 规范的 websockets 示例是实时聊天,其中查看新聊天消息的完整 Web 请求的开销(或延迟)比可以多路复用的 pub-sub 类型的进程要重得多向大量现有 websocket 发送新消息。
WebSockets 还是“Restful”HTTP 更高效或更高效的问题在很大程度上取决于场景。
【讨论】:
【参考方案2】:HTTP 是基于 TCP 的。
仅仅保持连接打开并不一定需要大量资源。但是,它通常需要不同的线程/IO 模型来处理这些连接。例如,这推动了 java 中针对异步和非阻塞 io 的许多 nio 更改。
【讨论】:
以上是关于HTTP TCP 和 WEB 套接字的主要内容,如果未能解决你的问题,请参考以下文章