【问题标题】:Websockets server implementation real performance for high concurrent production environmentWebsockets服务器实现高并发生产环境的真实性能
【发布时间】:2014-05-08 07:38:45
【问题描述】:

我正在评估用新的 JEE7 支持的 Websocket 功能替换我的生产应用程序的一些 http 池功能。我计划使用 Wildfly 8 作为我的下一个生产服务器环境,并且我已经迁移了一些与 websockets 兼容的模块,在开发时间上取得了良好的效果;但我怀疑它在生产中的工作方式以及在高负载环境下实现 websockets 的性能。

我一直在搜索有关最常用 JEE 服务器的文档,但主要制造商还没有生产 JEE7 环境,当他们有 JEE7 版本时,他们没有足够的文档来说明实现的工作原理或一些价值最大并发用户。此外,一些非官方的 cmets 表示 websocket 连接与“服务器套接字”相关联,但这似乎不是很有效。

我们可能假设 Websocket 仅用于从客户端的角度接收数据,并且我们假设每个用户将接收,例如,平均每分钟 10 条消息,带有一个小的 json 序列化对象(典型的模型数据类)。例如,我的需求更像是股票市场,而不是聊天应用程序。

例如,对于在 Wildfly 8 Server 的生产环境中使用 Websockets,我可以期待什么真正的性能?此外,我对与您熟悉的其他 JEE7 实现进行一些比较感兴趣。

【问题讨论】:

  • 我认为这个问题太宽泛了。您必须指定您的客户将要做什么。他们期望每秒 10 条消息吗? 100?他们只接收还是发送?聊天服务器和股票市场服务器具有不同的可扩展性模式。
  • 我们可以假设 Websocket 仅用于从客户端的角度接收数据,并且我们假设每个用户将收到,例如,平均每分钟 10 条消息,带有一个小的 json 序列化对象 (典型的模型数据类)。我的需求更像是一个股票市场而不是一个聊天应用程序

标签: performance jakarta-ee websocket glassfish-4 wildfly


【解决方案1】:

Web 套接字是基于 TCP/IP 的,无论实现如何,它们都将始终使用套接字(因此是打开的文件)。

性能方面,它实际上取决于您在做什么,基本上是多少客户端,每个客户端每秒有多少请求,显然还取决于您的硬件有多大。 Undertow 是基于非阻塞 IO 的,通常速度很快,所以应该足以满足您的需要。

如果您正在测试大量客户端,请注意您将达到基于操作系统的限制(肯定是打开的文件,可能还有可用的端口,具体取决于您的测试)。

【讨论】:

  • 感谢您的回答@StuartDouglas。我认为这或多或少是我所想的,但我仍然有一些疑问:套接字的最大数量将取决于 SO,而不是我拥有的硬件,这是真的吗?另一方面,您谈论的是“可用端口取决于在你的测试中”;你能解释一下吗?什么样的 websockets 测试将取决于可用的端口?非常感谢!
  • 端口仅限于每个 IP 地址。您可以使用 IP 别名来消除此限制。或额外的网卡。
  • “你不会总是达到操作系统限制”。如果您在这些 websocket 连接上什么都不做,您将不会轻易地在类似 Linux 的系统上达到几百万个连接的操作系统限制。但是当你开始使用 JSON 编码/解码进行出席、广播等真实消息传输时,你宁愿达到 CPU 或 MEM 限制。
猜你喜欢
  • 2019-10-26
  • 2011-09-28
  • 2019-04-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-30
  • 2017-05-08
相关资源
最近更新 更多