我在 Spring 框架中使用 SSE 创建了一个新年倒计时服务。
服务器通过事件流发送倒计时时间,允许所有访问特定链接的用户看到相同的倒计时时钟。
但是,我发现SSE对连接数有限制。因此,我的服务在 HTTP/1 上限制为 6 个用户,在 HTTP/2 上限制为 100 个用户。这让我考虑改用 WebSocket。
这就提出了一个问题:为什么有人会使用有连接数限制的SSE? 有没有一种方法可以让我可能不知道的连接数量有效地不受限制?
但是,我发现SSE对连接数有限制。
有两种类型的限制,当您提到六种限制时,我认为您正在谈论浏览器限制。这是一个任意限制,并且可能因浏览器和时间的不同而有所不同。如果您破解并重新编译您的浏览器,您可以将其删除。
但不要这样做。相反,请设计您的应用程序,以便用户只需要一个连接,并且所有事件都通过该连接推送。 SSE 服务器可以发送
event: xxx
标头来区分不同类型的事件。或者,如果您要发回 JSON 消息,您可以简单地使用其中的字段来描述事件类型。
我创建了新年倒计时服务
我的猜测是您只期望浏览器仅连接到此一次。在这种情况下,您可能遇到的限制不是 6(或 100)个,而是服务器资源上的一个:每个 SSE 连接需要一个专用的 TCP/IP 套接字。
没有特别的限制,但 Web 服务器通常会定义一个限制以避免拒绝服务攻击。每个套接字还需要一些内存,因此存在限制,并且打开套接字的数量也可能存在操作系统限制。
注意:如果您切换到 Websocket,您仍然需要为每个套接字提供一个专用的套接字。
为了避免每个客户端都需要一个套接字,请从数据推送设计切换到数据拉取设计。因此,让您的客户每 N 秒轮询一次以获取更新。根据服务器可以承受的负载与允许的延迟之间的权衡选择 N。
当然,对于固定时间点的倒计时,您根本不需要服务器连接;-)