使用Java/JVM还是Node.js/V8开发一个WebSocket流媒体客户端应用程序?

3
我需要通过WebSocket消费JSON格式的数据流,并将数据原样发送到Redis服务器。这是该应用程序需要完成的所有任务;没有UI,无需处理请求,也不需要处理数据。
我希望获得最小的占用空间和最高的性能。您认为Node.js/V8是否比Java/JVM更适合处理此场景?我在这两个选项之间犹豫,因为它们是我能够管理的选项,尽管我的主要技能是Java。
3个回答

4
一切都取决于您安装应用程序的环境以及您对每个环境的经验。节点事件循环模型非常高效,但我发现Java在处理CPU密集型任务时表现更好。我对这两种技术都不是专家(大约有10个月的Node.js和3年兼职Java经验),所以请勿将我的答案视为权威。在您的情况下,您只需要执行I/O操作,这正是Node.js擅长的地方,如果您熟悉JavaScript,请选择Node!

你说得对,这个应用程序的唯一目的是消费流并将JSON数据发送到Redis列表。我在Node方面没有太多经验,尽管我很熟悉JavaScript,这鼓励我去尝试一下! - luisfarzati
我使用它已经有一段时间了,个人亲眼见证了它的发展...从只能在Linux上运行到具备了完整的Windows支持。我非常喜欢编写Node应用程序,我的大学项目是使用WebSockets(也是一个很棒的技术)。 - Jack

3
Node.js和socket.io在这种情况下易于设置和部署。非常容易部署。您的内存使用量将达到20-30mb,性能指标上的问题是困难的,因为很难对WebSockets进行基准测试。如果不在Heroku上部署,则我会选择node.js。
您可以使用node.js + socket.ionode.js / ruby + faye。 如果流量生成<8k请求/秒,则两者都应该在非常基本的VPS /硬件设置上正常运行。
我在ruby上使用faye,在1.1k个客户端聊天时使用WebSockets没有任何问题。我们在node.js聊天中拥有峰值4k个客户端。非常基本的硬件。

我想说的性能更多地涉及I/O处理和V8引擎执行此类任务。 - luisfarzati
1
node.js 很擅长处理 I/O 连接的负载。事件循环赢了 :) - Jakub Oboza
在Linux(Dell XPS l502x笔记本电脑)上对Node + Socket.io进行基准测试,我成功让Node.js处理平均每秒30,000条消息。 - Jack
根据硬件限制,我在我的MacBook Pro上无法将Redis的消息推送速度提高到超过22k条/秒。 - Jakub Oboza

0
我建议如果你有足够的经验,可以使用Node.js

你有过这样的经历吗?我发现在Node.js中实现WebSocket客户端有点棘手(特别是如果我不想使用浏览器库)。 - luisfarzati
在使用WebSockets时需要小心...许多浏览器都有自己的实现,请参见此处:https://dev59.com/vnM_5IYBdhLWcg3wt1vD(另外,Socket.IO提供了回退选项,如AJAX轮询)。 - Jack

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接