我需要一个基于事件的服务器,其中数据很容易被推送到客户端。正如我在论坛中所读到的那样,基于websocket的服务器是我最好的选择。请解释它的工作原理以及它在生产箱上的使用情况有多稳定?
答案 0 :(得分:2)
由于Web套接字是如此新颖,我不相信很多应用服务器对Web套接字有很大的支持。例如,Tomcat声明以下“Tomcat提供了对RFC 6455定义的WebSocket的支持。此功能尚未最终确定,我们鼓励您以错误报告的形式提供反馈”。但是,如果以稍微不同的方式查看体系结构,则可以利用Web套接字的优点。将发送基于事件的股票报价更改的sample application可以按以下逻辑步骤工作。
1)客户端应用程序(Web应用程序或其他Web套接字启用应用程序)将与请求的资源服务器建立Web套接字连接。
2)然后服务器负责接收外部(后端事件)并选择哪些客户端接收相应的消息
3)然后该消息将通过websocket连接发送到客户端。标准定义的Websockets应该允许该连接保持打开,只要客户端在线并且应该接近实时地传递该数据。此外,它还具有运行在标准化端口/协议上的优势,可以通过网络可靠地传输。
从中您可以看到基础设施实际上有4个逻辑部分。 1)为接收事件而定制的后端。对于股票报价,这将是机构的后端。 2)负责将事件逻辑链接到相应客户端的消息代理。 3)与客户端的websocket连接。 4)客户本身
后端:可以用连接到事件所需的任何内容编写。对于股票报价系统,这将是一些链接到金融服务提供商的自定义应用程序
对于Message Broker 我建议您使用JMS或AMQP来处理“基于事件的服务”。这些消息代理很好地定义并在许多企业应用程序中使用。从硬件角度来看,它们可以直接在后端运行或单独运行。此外,它们为您提供了各种各样的服务(点对点,发布订阅等),您可能希望在应用程序中使用这些服务。或者,如果您想创建自己的自定义消息传递服务,可以使用类似Netty的东西。
对于websocket连接,您将需要一种可以轻松可靠地连接到您的消息代理系统的服务。例如,Kaazing(免责声明和我为Kaazing工作的完全披露)提供企业AMQP版本和JMS版本,可以直接连接到您的消息代理。
客户端问题:包括浏览器是否支持网络套接字以及退回机制是什么(长轮询,ajax)。这些实际上取决于您用于创建websocket连接的服务。虽然有大量的开源服务提供回退机制,但Kaazing还提供了一个模拟的websocket连接,其逻辑上更像是websockets,而不是创建websockets来替换的回退机制(long polling / ajax)。
稳定性:JMS和AMQP被广泛使用和稳定。有一个令人印象深刻的行业用户名单已经在他们的技术上运行。
查看此生活web architecture white paper了解更多详情