Sha*_*313 6 javascript server-sent-events
我正在建立一个聊天只是为了好玩.我从来没有这样做,而我却在总体上试用EventSource API (Server-Sent Events)的JavaScript.我刚刚听说它大约3天前,我觉得它比设置一个有趣且容易得多WebSocket.
我知道长时间的民意调查耗费了大量资源.但是,由于我从未听说过EventSource,它如何影响服务器?它是否耗尽了相同数量的资源?
我注意到,在Networks Tab的Google Chrome Developers Tool,该EventSource的不创建一个具有较大规模的内容(超过时间)的请求.拥有大量内容的1个请求会更好吗?
我的聊天目前正在运行两个EventSource.一个用于聊天本身(每次运行2500ms)和聊天中的"正在输入..."机制(每次运行250ms).
在大约一分钟的聊天之后,两个请求的组合内容大小是关于的150kb.这将增加更多的消息.
我担心我的主人会暂停我的帐户.这是我的一个朋友发生的事情,他使用了民意调查或长期民意调查(我忘了).我不确定EventSource是否使用尽可能多的资源作为轮询或长轮询.
长轮询比 EventSource 使用更多资源,因为它不断建立和销毁连接。使用EventSource,仅使用单个连接,客户端正在等待数据,而不是检查服务器是否有新数据。
使用长轮询时,客户端将在以下情况下断开连接:
当服务器没有数据时,客户端将等待直到超时,直到服务器有数据。如果有数据,客户端会断开连接并创建另一个连接。如果客户端超时,客户端将断开连接并建立另一个连接。因此你可以从很多地方看到头顶。
长轮询
事件源
GET由客户端使用带有Accept: text/event-stream标头的请求发起WebSockets
HTTP GET使用带有Upgrade: websocket标头的请求发起资源消耗:
EventSource的开销主要就是连接的存在。从这个意义上讲,它类似于 websocket,其中建立并维护单个连接。因此,由于持续的建立/销毁周期,使用长轮询您将收到最大的开销,来自 websocket 的第二大开销(因为它们是双向的),而来自 EventSource 的开销最少,这是单向的。
更好的选择:
对于客户端和服务器之间的实时双向通信,没有什么比 Websocket 更好的了。这是一种客户端和服务器相互监听数据而不是相互刺激数据的解决方案。
上交所要求
我认为您提出这个问题的假设是您认为 Chrome 中显示的内容是单独的请求。由于 EventSource 与服务器建立了套接字,因此您实际上正在读取通过 EventSource 套接字发送的累积数据量。因此,当您发送数据时,您将重复使用相同的连接,并且无需担心请求大小。
总之,大多数主机暂停轮询的原因是短轮询和长轮询都需要大量请求。如果您使用 EventSource 或 websockets,则您使用的是使用套接字的实时通信,套接字不会向 HTTP 服务器发送“垃圾邮件”请求。(如果我发送 100 个数据有效负载,EventSource 和 websockets 将使用相同的连接,长轮询将重新连接至少 100 次)您在这里唯一需要注意的是您的服务器可以处理的最大并发连接数,因为套接字比轮询使用更少的 CPU 和资源。
关于 EventSource/SSE 需要考虑的事项:
| 归档时间: |
|
| 查看次数: |
435 次 |
| 最近记录: |