集群事件驱动Java应用程序-我应该使用WebSocket还是轮询?

集群事件驱动Java应用程序-我应该使用WebSocket还是轮询?,java,javascript,websocket,Java,Javascript,Websocket,我正在创建一个监视用户活动的监视应用程序。我的系统中有四个元素: EventCatcher:EventCatcher负责捕获子系统中发生的所有事件,并将数据推送到EventHandler。根据观察,平均每秒有10个事件被推送到EventHandler。有些事件是UserLogin、UserLogout EventHandler:EventHandler是一个单例类,它处理来自EventCatcher的所有传入事件。它还跟踪系统中所有已登录的用户。因此,每当EventHandler接收到UserL

我正在创建一个监视用户活动的监视应用程序。我的系统中有四个元素:

EventCatcher
EventCatcher
负责捕获子系统中发生的所有事件,并将数据推送到
EventHandler
。根据观察,平均每秒有10个事件被推送到
EventHandler
。有些事件是UserLogin、UserLogout

EventHandler
EventHandler
是一个单例类,它处理来自
EventCatcher
的所有传入事件。它还跟踪系统中所有已登录的用户。因此,每当
EventHandler
接收到UserLogin事件时,就会从事件中提取
User
对象,并将其存储在
HashMap
中。当接收到UserLogout事件时,该
用户
对象将从
哈希映射
中删除。此类还维护所有活动Websocket会话的
集,因为每次发生事件时,我都希望通知所有打开的会话发生特定事件

websocketendpoint
:这只是一个用
@ServerEndpoint
注释的简单Java类

客户
:我将构建的系统仅供内部(公司)使用。在生产阶段,最多只有5-10个客户。每次事件发生时,所有客户端都将收到相同的信息

因此,现在我正试图说服我的主管Websockets是一种可行的方法,然而,我的主管发现它确实没有必要,因为一个简单的轮询解决方案就可以做到这一点

他的观点是:

  • 我们并不需要毫秒级的最新信息。我们可以随时投票
  • 如果我要维护一个开放WebSocket会话列表,那么在集群环境中该如何工作(我们使用负载平衡器)
  • 如果我计划在每次事件(UserLogin、UserLogout)发生时向客户端发送信息,那么我应该能够向所有WebSocket会话发送小的更新—这意味着,我不可能发送所有内容的整个JSON转储。这意味着,对于每个WebSocket实例,我必须维护另一组用户,并正确维护它,以镜像
    事件处理程序中包含的用户集
  • 我的主管建议我丢失WebSocket,将其转换为一个简单的Servlet,让客户端每秒轮询一次以接收整个JSON转储

    在这种情况下,我应该坚持使用WebSocket吗?还是我应该投票

    据我所知,Websockets相对于轮询的主要优势在于,通过使用Websockets,您将拥有从客户端到服务器的持久连接。HTTP并不是真正用于实时数据的

    此外,轮询要求每次发送一个HTTP请求,每个请求都带有HTTP头。如果HTTP请求头包含800个字节,那么每个客户端每分钟发送48kb。对于WebSocket,这不是问题

    但话说回来,我们不会有很多活跃的客户。我们不担心第三方嗅探我们的请求,因为该系统仅供公司使用-内部使用!我相信我的主管想要一些简单可靠的东西

    无论哪种方式我都同意。我只是想确定我是否使用了适合这份工作的工具

    附加的问题:如果WebSoCosits是要走的路,有什么理由我应该考虑轮询?

    < P>整个的目的是有效地支持客户机和服务器之间的持续连接。p> 我不清楚你是如何实现你的应用程序的。如果这是一个在Servlet环境中运行的web应用,利用web服务器中的WebSocket支持,请注意您需要使用最新版本的Servlet容器。例如,对于Tomcat,您必须使用版本8或版本7的最新更新

    当然,web浏览器必须支持WebSocket

    请注意,WebSocket仍然是一种新技术,在规范和实现方面都在不断变化和发展

    气氛 <>你可能想考虑使用这个框架。大气支持多种技术,包括WebSocket和Comet


    web应用程序框架利用Atmosphere为推送应用程序提供自动支持。默认情况下,首先自动尝试WebSocket。如果WebSocket不可用,Vaadin+Atmosphere会自动返回到其他技术,包括轮询。

    您的网络是否真的关心每分钟48Kb/客户端?这是一个非常低的数据传输速率。WebSockets是一个闪亮的新玩具,但轮询似乎适合这种应用。在集群环境中维护会话似乎会带来额外的复杂性和故障点(如果其中一个集群成员出现故障怎么办?)。使用客户端定期轮询的简单web服务,您不必担心会话管理。我的两分钱…@pens-fan-69这是我的主管正在考虑的。有太多的文章和博客宣称WebSockets是未来。显然,看起来我只需要为这个应用程序提供一个简单的解决方案,轮询就足够了。谢谢你的意见!非常感谢。