- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我将构建一个 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 应用程序?
最佳答案
是的,Node.js + Socket.IO 会做得很好。 Node 使用事件循环,这意味着根据请求它会进入队列。 Node 逐一处理这些请求。传统的 Web 服务器处理“每个请求一个线程”的方法,即创建一个线程来处理该请求。
这里 Node 的好处是它不需要经常切换上下文,这意味着它可以非常快速地处理这些请求......很可能比您的 PHP 服务器更快。然而,Node 在单个 CPU 内核上作为单个进程运行。如果您的应用程序是 CPU 密集型应用程序,它可能会阻塞,这意味着每个请求的时间会变慢。
但在我看来,您的应用程序不是 CPU 密集型的,这意味着 Node.js 会运行良好。
决定如果你的时间有限,又不想学习新技能(Node),PHP 也行。如果您有时间,我建议您学习 Node.js,因为它在 I/O 密集型任务(例如用于创建笔记的 REST API)方面非常强大。
更新用户界面如果您的预期用途是通过移动设备,我建议使用 WebSockets,但有一个后备方案,例如长轮询。可以使用 Node 或 PHP 更新客户端 UI。然而,根据我的经验,在 Node.js 上使用 Socket.IO 更容易做到这一点。
客户端
socket.on('new-note', function (data) {
placeNewNote(data);
});
服务器端
socket.emit('new-note', data);
Node 入门: How do I get started with Node.js
另请注意,如果您想构建使用 WebSockets 的 native Android 移动应用...您将需要使用:Java socket.io client
关于Node.js 和 Socket.io - 它们在实时 Web 应用程序方面能走多远?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10531162/
我想递归地遍历一个目录,但我希望 python 在遇到包含超过 100 个文件的目录时从任何单个 listdir 中断。基本上,我正在搜索 (.TXT) 文件,但我想避免使用包含大型 DPX 图像序列
我正在尝试遍历列表(例如 sql 行)并为每一行触发例程。问题是传递给函数的值不会在运行时进行评估,因此根据函数执行所需的时间,它可能会使用下一行中的任何值而不是当前行。 我知道我可以在普通函数中提取
我需要以毫秒为单位的时间来处理大量事务,因此我想要正确且快速的东西。下面的工作会做得最好吗? : iMilli := int((time.Nanoseconds() % 1e6) / 1e3
我有以下目录/文件设置(已简化): Ce +---top.txt +---X0.0 | | | +---Y0.0 | | | | |
我遇到了类似的问题: Connecting to Redis To Go with PHP 基本上,我在 redis 中有这个 uri: redis://myusername:foopassword@
我阅读了下面的主题 Go: multiple value in single-value context 但我不明白这个解释在我的案例中。可能是因为我想使用 interface 在下面的情况下,我得到
我有一个模板,我想使用 text/template 评估各个字段包裹。我很难弄清楚评估应该如何工作,因为下面的代码似乎失败了。模板包是否足够强大以处理此类评估? type something stru
我编写了简单的服务器程序来从客户端接收数据。我有点不明白有时我从函数中得到错误 read tcp4 IP:PORT i/o timeoutint, err := conn.Read([]byte) 未
我只需要解码和更新 json 对象的特定值。问题是我不知道对象的完整结构。 encoding/json 包“忽略”/截断结构中未提供的字段,因此在编码时这些字段将丢失。 我想知道是否可以只解码我知道的
我正在尝试使用带有 C++ 目标的 ANTLR4 来实现 TSql 解析器。我抓取了语法文件 here .该jar用于制作相应的源文件(因冲突将TSqlParser.cpp中的NULL全部改为null
我在 win7 中使用 python 3.3.3 - 我只想列出网络目录中的所有文件。 import os for root, dirs, files in os.walk("X:\\network\
当我运行 go 脚本 ( go run example.go ) 时出现此错误 /home/travis/.gvm/gos/go1.1.2/src/pkg/github.com/user/exampl
我正在尝试通过 gmail API 发送电子邮件使用 Go但我发现文档非常有缺陷/令人困惑。这一次我看不到收据字段和电子邮件正文。 我不需要上传任何东西,所以我找到了 Simple upload ,
本人是一名专业的windows/.Net开发者,一直在慢慢学习rails/ruby/python/etc。在我有空的时候。在过去 8 年左右的时间里,我也一直在使用各种 Linux 发行版。然而,有一
我想知道是否可以使用 std http 来响应 http 请求打包并仍然保持 go 例程事件(例如运行任务密集型任务)。用例是我需要接收一个 http 请求,然后在几分钟后回调该服务 最佳答案 只需从
我想知道关于指针的最佳实践是什么。我应该在结构上还是在其字段上定义它们。我虽然定义一个指向结构本身的指针是有意义的,但这里有一个我觉得很有趣的例子。如果所有字段都是指针,为什么我不应该使用指向整个结构
我是一名优秀的程序员,十分优秀!