Node.js和Socket.io – 他们能够使用实时Web应用程序吗?

我将build立一个Web应用程序来pipe理笔记(想想类似Evernote的东西)。 我决定使用Backbone.js + JQuery客户端。 服务器端,我还没有决定:纯PHP(我知道得很好)或Node.js + Socket.io(对我来说是全新的)。

我正在考虑Node.js + Socket.io,因为我想让我的web应用程序是实时的(例如:如果用户更新了一个便笺,该便笺就会立即为共享该便笺的协作者更新,而无需重新加载页面)。

作为第三种select,我还在考虑将Node.js和Socket.io用于REST API的UI和PHP(我觉得使用PHP构buildAPI更加舒适)。 PHP和Javascript代码将共享MongoDB数据库。

我的问题是:如果我使用PHP开发Web应用程序的REST API,并通过API创build用户的新备注(即:Android应用程序发送API请求来创build该备注),Node.js, Socket.it和Backbone.js能够立即更新用户的用户界面,并在他们的屏幕上显示新的笔记? 我认为可以称为“推送通知”。

我希望我已经清楚了。

另外,还有没有其他优秀的技术来构build实时Web应用程序?

是的,Node.js + Socket.IO会做很好的工作。 节点使用事件循环,这意味着一个请求进入队列。 节点逐个处理这些请求。 传统的Web服务器处理一个“Thread-per-request”方法,在这个方法中创build一个线程来处理请求。

这里Node的好处在于它不需要频繁的上下文切换,这意味着它可以很快处理这些请求……最有可能比你的PHP服务器更快。 但是,Node在单个CPU内核上作为单个进程运行。 如果您的应用程序是CPU密集型的,可能会阻塞,这意味着每个请求的时间将会变慢。

不过,听起来像你的应用程序不是CPU密集型的,这意味着Node.js将运行良好。

决定如果你的时间有限,你不想学习一个新的技能(节点),PHP会没事的。 如果您有时间,我build议您学习Node.js,因为它对于I / O密集型任务(如用于创buildNotes的REST API)非常有用。

更新用户界面如果您的预期用途是通过移动设备,我build议使用WebSockets,但有一个像长查询的回退。 可以使用Node或PHP更新客户端UI。 但是从我的经验来看,使用Node.js上的Socket.IO更容易。

示例使用Node.js / Socket.io更新客户端

客户端

socket.on('new-note', function (data) { placeNewNote(data); }); 

服务器端

 socket.emit('new-note', data); 

节点入门: 我如何开始使用Node.js

另请注意,如果您要构build使用WebSocket的原生Android移动应用程序…您将需要使用: Java socket.io客户端

对于Web服务器和推送服务器使用Node.js当然是最好的方法。 特别是如果你打算使用Node.js,那么你必须学习它,所以学习如何制作Web服务器是很自然的(我build议使用最着名的Express框架 )。

现在你可以使用PHP的Web服务器和Node.js推送服务器。 要使它们相互通信,您可能需要将Redis添加到您的应用程序中。 Redis将允许您将通知推送到任何连接到它的客户端,例如PHP服务器或Node.js推送服务器(并且它可以很好地扩展)。 从这一点,推送服务器将把数据进一步推送到客户端的浏览器。

替代技术将例如Twisted服务器 。 当然,你需要学习Python才能使用它。 我不知道它是否正确支持WebSockets。 我认为你应该坚持Node.js + socket.io。