Node.js和Socket.io - 他们可以用实时Web应用程序走多远?

dan*_*dan 5 node.js socket.io

我将构建一个Web应用程序来管理笔记(想想类似于Evernote的东西).我决定使用Backbone.js + JQuery客户端.服务器端,我还没有决定:要么是纯PHP(我非常清楚),要么是Node.js + Socket.io(对我来说是全新的).

我正在考虑Node.js + Socket.io,因为我希望我的Web应用程序是实时的(即:如果用户更新了一个注释,该注释会立即更新为共享该注释的协作者,而无需重新加载页面).

作为第三种选择,我还在考虑将Node.js和Socket.io用于UI,将PHP用于REST API(使用PHP构建API感觉更舒服).PHP和Javascript代码将共享MongoDB数据库.

我的问题是:如果我使用PHP为我的Web应用程序开发REST API,并且通过API创建用户的新注释(即:Android应用程序发送API请求以创建该注释),Node.js, Socket.it和Backbone.js能够立即更新用户的UI并在屏幕上显示新的笔记吗?我认为这可以称为"推送通知".

我希望我很清楚.

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

Jac*_*ack 9

是Node.js + Socket.IO会做得很好.节点使用事件循环,这意味着在请求时它被输入队列.Node逐个处理这些请求.传统的Web服务器处理"每请求线程"方法,其中创建线程来处理该请求.

Node的好处在于它不需要经常进行上下文切换,这意味着它可以非常快速地处理这些请求...最有可能比PHP服务器更快.但是,Node在单个CPU核心上作为单个进程运行.如果您的应用程序是CPU密集型的,那么它可能会阻塞,这意味着每个请求的时间会变慢.

然而,听起来我的应用程序不是CPU密集型的,这意味着Node.js可以很好地工作.

决定 如果您的时间有限,并且您不想学习新技能(节点),那么PHP就没问题了.如果你有我建议学习Node.js的,因为它是非常强的时候,当涉及到I/O密集型任务,如REST API来创建注释.

更新UI 如果您的预期用途是通过移动设备,我建议使用WebSockets,但需要使用长时间轮询等后备.可以使用Node或PHP更新Client UI.但是从我的经验来看,使用Node.js上的Socket.IO更容易.

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

客户端

  socket.on('new-note', function (data) {
    placeNewNote(data);
  });
Run Code Online (Sandbox Code Playgroud)

服务器端

socket.emit('new-note', data);
Run Code Online (Sandbox Code Playgroud)

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

另请注意,如果您要构建使用WebSockets的原生Android移动应用程序......您将需要使用:Java socket.io client