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