聊天应用程序:Node.js还是APE?

6
我想创建一个聊天应用程序,它将使用php/codeigniter来进行视图和用户界面。我已经阅读了许多在stackoverflow上的帖子,其中推荐使用node.js或socket.io。然而,我也遇到了APE(Ajax Push Engine)。我不太了解这两个技术,想知道该选择哪个。
我研究了一下node.js,并看到了很多好的东西,但让我担心的主要是它相对较新,并没有很多真实世界的网站测试/使用它。
另一方面,APE有。它看起来类似于node.js。但是,像我说的,我不知道应该选择哪个。
哪个更适合创建聊天应用程序呢?
谢谢!

免责声明:我在许多项目中使用过socket.io/node(以及socket.io/Tornadio),但从未使用过APE。就创建聊天应用程序而言,它们都非常出色。我认为socket.io稍微强大一些(例如,它利用了WebSocket),而APE则更加稳定(socket.io的API在过去一个月中发生了根本性变化)。请在这里查看更多信息:https://dev59.com/VljUa4cB1Zd3GeqPT7iP - Alex Churchill
2个回答

6

我尝试过使用node.js和socket.io,但最终选择了APE来完成一个大项目。

我的想法是,与往常一样,这取决于你想要实现什么。仅就服务器部分而言,使用node.js可以得到一个不会自动运行任何东西的机器,你需要自己编写它(或使用库)。而在APE中,频道和连接的处理已经内置(编译成C语言)。尽管如此,您仍然需要使用JS构建您自己的逻辑部分 - 或使用示例。

在客户端方面,socket.io提供了一个具有三个命令的客户端框架,而APE则有其APE_JSF来处理连接(相对于频道,带来了更多功能)

就我个人而言,我更喜欢APE,尽管对初学者来说缺乏文档。但是,请记住,APE不会提供文件/图像,它不是完整的Web服务器,而是针对实时推送进行了优化,可以处理约10K个并发用户。


我一直关注你的帖子,似乎你没有注意到 node.js 也支持本地 C/C++ 模块,虽然它们很难编写,我承认它们很难找到,但 MongoDB 中用 C 编写的 BSON 解析器是 native node 的一个好例子。 - ShrekOverflow
1
我同意 APE 比 NodeJS 更加稳定,但是需要升级混淆的文档,否则新开发者使用它时会感到不满意。 - ShrekOverflow
你的两个评论都是正确的:除了编写JS之外,我没有深入研究过node.js选项。APE文档缺少很多东西,而且很难进入这个主题。然而,一旦你掌握了它,你就可以用它做出令人印象深刻的事情。你仍然可以用node实现相同的功能,但我认为当涉及到纯性能(>10K用户)时,node会遇到问题。 - Xosofox
实际上,Node.js 可以轻松处理超过 10k 用户。我已经使用 Node.js 运行了很多应用程序和其他东西,它的性能真的非常惊人。看看这个链接 http://blog.famzah.net/2010/07/01/cpp-vs-python-vs-perl-vs-php-performance-benchmark/,Node.js 的性能是不可思议的。此外,我们还可以为 Node.js 编写核心 C++ 插件/模块,这样可以更好地控制 Node.js。但是,作为一个低级 API,Node.js 需要非常多的知识和时间来编写应用程序,但学习它是值得的 :-) - ShrekOverflow

2
和您一样,我不太熟悉APE,然而在Node.js上,socket.io附带了一个聊天应用作为它的主要示例应用
确实,目前没有很多网站使用Node.js。然而,socket.io可能被认为是Node的“杀手级应用程序”,因此与之相关的讨论/工作相对较多。
我假设APE具有稳定的API,而socket.io不一定有 - 例如,0.7版本是一个相当广泛的、改变API的更新。随着socket.io规范的发布,这种情况可能会更少发生。

我在看到你的评论之前就写了这个...不过我认为它仍然很相关。socket.io-spec的发布表明它正在变得更加稳定,甚至朝着多服务器实现的方向发展,但这有点牵强。 - Stoive
在使用Node.js时,我是否应该几乎总是使用Socket.io? - Derek
1
不,如果我需要将“推送”功能集成到某个项目中,我会花费精力将Node.js + Socket.io与我已经使用的任何现有后端(PHP/.NET/JSP/等)集成起来。例如,我尝试找到一些.NET相关的东西,但最终得出结论,最好只是使用socket.io创建一个“sockets”层。 - Stoive
1
Socket.io聊天示例应用程序的链接已经失效。这段代码显然在最新版本中不再可用。 - davidbourguignon

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