我有几个项目是使用hookbox来管理web客户端和服务器之间的实时消息传递。Hookbox很棒——它完全抽象了传输层,通过一个优雅的安全系统,在不同的通道上暴露了一个简单的发布/订阅接口。
不幸的是,由于最初的维护者甚至不愿意付出努力来移交所有权,hookbox项目迅速陷入混乱。(叽阿!)所以很难再认为它是一个可行的平台了。
用web应用程序提供实时通信的好平台是什么?要求:
- 工作无缝跨浏览器,使用HTML5 websockets或COMET可用。传输选择对应用层应该是不可见的。我不关心旧浏览器(IE6)
- 从javascript和服务器端系统(即php/python/ruby)访问客户端——这是至关重要的
- 提供具有任意有效负载的发布/订阅隐喻
- 允许客户端查看连接到通道的其他客户端,即存在
- 通过回调到任何web应用程序的细粒度访问控制(很好)
我听说过那个套接字。io可以做一些这样的事情,但我感觉它在堆栈的较低层。它能连接到非javascript库吗?身份验证吗?
我有一个非常好的经验与NodeJS和Socket。在过去的8个月里服务器端组件对我来说非常稳定——我可以让它运行在一个非常高的消息量下,它的驻留内存从来没有真正超过20MB。到目前为止,我只能让它运行大约4周而不终止服务器,但这只是因为我需要更新我的服务器端代码。
工作无缝跨浏览器,使用HTML5 websockets或COMET可用。传输选择对应用层应该是不可见的。我不关心旧浏览器(IE6)
提供具有任意有效负载的发布/订阅隐喻
插座。IO也是一款很棒的软件。它正在积极开发中,并使用EventEmitter (NodeJS)的"on"(订阅)和"emit"(发布)语义构建了一个简单的pub/sub风格抽象。对于正在使用的传输,它在客户端也是非常透明的。我使用它主要是为了直接支持WebSocket,但它可以退回到基于Flash的socket, xhr轮询和jsonp轮询。
来自javascript和服务器端系统(即php/python/ruby)的客户端访问——这是至关重要的
NodeJS是JavaScript,运行在V8引擎上。它有大量的第三方模块,这些模块提供了很好的抽象,以及与外部组件的接口,比如数据库或消息队列等。至于用php/python/ruby访问系统,它可以像访问任何其他服务器一样工作。选择您的通信方法(基本的TCP/IP,或者HTTP post或get,甚至通过文件系统),NodeJS并不真正关心谁提供数据。就我个人而言,我已经实现了一个运行良好的c#客户端。
允许客户端查看连接到通道的其他客户端,即presence
它没有任何内置的"存在"逻辑,尽管内置的"发布/订阅"逻辑已经在Socket中存在。那么,您所要做的就是将状态存储在服务器上,以便新客户机可以检索现有的状态数据。我已经在保留状态的服务器上实现了自己的基本pub/sub,以及所有这些(包括NodeJS服务器代码和基本的Socket)。IO存根),它只有50行JavaScript(包括空白)。
通过回调对任何web应用程序进行细粒度访问控制(很好)
不确定你所说的"通过回调到任何web应用程序的细粒度访问控制(很好)"是什么意思。它们的发布/订阅事件/观察者比喻使用回调,因此您可以将特定的操作挂钩到特定的事件。
认证吗?
我还没有必要对我们的系统做任何验证,所以我不能直接与它对话。然而,如果你浏览NodeJS模块,你会注意到有许多可用的认证模块,包括LDAP和OAuth,更不用说一个声称做OpenId, Google, OAuth, Twitter, LinkedIn, Yahoo, Readability, Dropbox, Justin的模块。tv, Vimeo, Tumblr, OAuth2, Facebook, GitHub, Instagram, Foursquare, Box.net, LDAP"
虽然我还没有尝试过,但我开始在push中寻找Node Knockout 2011条目。除了JavaScript,它还支持以下非js客户端:
- objective - c
- ActionScript
- 。净,Silverlight Ruby
- Arduino
如果可以通过第三方发送消息,您可以使用他们的沙盒计划(20个连接)免费尝试该服务。最多10万条消息/天),看看它是否满足您的需求。(我对"存在"的要求有点不确定,虽然它可能在文档中被涵盖。)
我建议使用node.js,它有很多库用于各种事情。现在有一个用于实时消息传递的库是.js。我没有太多的经验,但我试过了,我想说它运行得很好,有你说你需要的一切。