在工作中,我们目前正在构建一个支持SSE的webapp。
我们都是SSE的新手,所以我们正在处理很多(新手)的问题:
断开连接
当客户端关闭他的浏览器时,我们会得到一个断开连接的连接。我想有人把它叫做鬼魂联系。如何在服务器端检测到这样的连接?我们想要从通知列表中删除这些客户端。
极限连接量
我知道每个“SSE-connection”在application server上都是活的。当我关闭我的开发服务器时,我直接在浏览器调试器上注意到连接已经消失了。我们不应该设定一些连接的上限吗? The application server连接总有一段时间会耗尽.
此外,一些服务器为每个请求指定一个线程。所以这可能会导致一些令人筋疲力尽的问题。
应用程序或web服务器
整个SSE-broadcasting应该由一个application server管理(其中大多数请求与业务相关),还是应该由一个完全致力于处理SSE-event的web server来管理?目前,所有业务请求和SSE事件都由Jboss application server处理。
集群环境
如何在集群环境中管理SSE,应用活动-活动模式(=主-主),其中请求在实例之间随机路由?
如果您有更多有用的信息(和注意事项),请随意分享!
发布于 2018-06-05 22:46:05
集群环境
我认为你的意思是
在这种情况下,我认为您需要区分哪些需要从客户端提取,哪些需要从后端推送。通常,需要推送的是实时通知或更新。但是很多其他的电话都可以用经典的方式来拉动。对于从客户端提取的所有内容,只要后端是无状态的,那么您就没事了。
对于这里推送的所有内容,我都会这样做:当打开浏览器应用程序(客户端)时,它会创建到一个后端实例的SSE连接。你不能保证它是哪一种。后端应该每X秒向客户端发送一次心跳。如果客户停止接收心跳,那么他可以假设后端已经关闭。然后,它可以重新创建SSE连接。但你可能失去了通知..。为了避免这种情况,您可能有一个时间戳或通知id,当重新创建连接时,您可以传递该时间戳或id,以便从它获得所有后续通知。
在后端下面,您需要某种消息总线或代理的订阅系统。这样,每个后端都会收到通知,并尝试将它们推送到连接的客户端。
连接极限量
使用上面的设计,您可以通过简单地杀死创建的第一个后端来限制每个后端的连接数。然后,客户端将重新尝试建立与潜在的新后端实例的连接。这可能不是不“干净”,但可能有用..。
断开连接
请看奥德丽的回答,这是使用心跳的经典方法:)
应用程序或web服务器
我认为这个问题会导致固执己见的答案。对我来说,我会说“吻”(保持简单愚蠢)
发布于 2016-09-13 09:18:52
集群环境
管理服务器发送的事件应用程序与管理传统的web应用程序没有太大区别。您可以使用负载均衡器正确管理集群环境,并实现自动缩放机制,以便在达到实例限制时继续为连接提供服务。
您应该注意的最重要一点是确保您使用的代理几乎可以无限期地打开连接: HAProxy和NGINX是很好的候选者。
连接极限量
一些服务器回收线程(例如,下面的线程),而另一些则没有。一旦您知道您选择的服务器是如何处理线程的,您就可以计算每个实例的限制。
应用程序或web服务器
除非您管理“经典”业务相关请求的应用服务器已经大量使用,否则不需要有专门的服务器来管理SSE事件。
断开连接
关于断开连接的连接,您可以通过定期发送通常称为“心跳”的内容来测试它们:一条空消息,如果连接被客户关闭,它将返回一个错误。
https://stackoverflow.com/questions/38837103
复制相似问题