为什么sse在连接数有限制的情况下却被广泛使用?

问题描述 投票:0回答:1

我在 Spring 框架中使用 SSE 创建了一个新年倒计时服务。

服务器通过事件流发送倒计时时间,允许所有访问特定链接的用户看到相同的倒计时时钟。

但是,我发现SSE对连接数有限制。因此,我的服务在 HTTP/1 上限制为 6 个用户,在 HTTP/2 上限制为 100 个用户。这让我考虑改用 WebSocket。

这就提出了一个问题:为什么有人会使用有连接数限制的SSE? 有没有一种方法可以让我可能不知道的连接数量有效地不受限制?

spring-boot websocket server-sent-events
1个回答
0
投票

但是,我发现SSE对连接数有限制。

有两种类型的限制,当您提到六种限制时,我认为您正在谈论浏览器限制。这是一个任意限制,并且可能因浏览器和时间的不同而有所不同。如果您破解并重新编译您的浏览器,您可以将其删除。

但不要这样做。相反,请设计您的应用程序,以便用户只需要一个连接,并且所有事件都通过该连接推送。 SSE 服务器可以发送

event: xxx
标头来区分不同类型的事件。或者,如果您要发回 JSON 消息,您可以简单地使用其中的字段来描述事件类型。

我创建了新年倒计时服务

我的猜测是您只期望浏览器仅连接到此一次。在这种情况下,您可能遇到的限制不是 6(或 100)个,而是服务器资源上的一个:每个 SSE 连接需要一个专用的 TCP/IP 套接字。

没有特别的限制,但 Web 服务器通常会定义一个限制以避免拒绝服务攻击。每个套接字还需要一些内存,因此存在限制,并且打开套接字的数量也可能存在操作系统限制。

注意:如果您切换到 Websocket,您仍然需要为每个套接字提供一个专用的套接字。

为了避免每个客户端都需要一个套接字,请从数据推送设计切换到数据拉取设计。因此,让您的客户每 N 秒轮询一次以获取更新。根据服务器可以承受的负载与允许的延迟之间的权衡选择 N。

当然,对于固定时间点的倒计时,您根本不需要服务器连接;-)

© www.soinside.com 2019 - 2024. All rights reserved.