Javascript 实时web库-用socket.io或什么替换钩子盒?

Javascript 实时web库-用socket.io或什么替换钩子盒?,javascript,real-time,websocket,socket.io,publish-subscribe,Javascript,Real Time,Websocket,Socket.io,Publish Subscribe,我有几个项目是使用hookbox构建的,用于管理web客户端和服务器之间的实时消息传递。Hookbox非常棒——它完全抽象了传输层,通过一个优雅的安全系统跨不同的通道公开了一个简单的发布/订阅接口 不幸的是,由于最初的维护人员甚至不愿意努力移交所有权,挂钩盒项目很快陷入混乱。(GRRR!)所以很难再考虑它是一个可行的平台。 什么是提供web应用程序实时通信的好平台?要求: 使用HTML5 websockets或COMET(如果可用)进行跨浏览器的工作。传输选择应该对应用层不可见。我不在乎古代浏

我有几个项目是使用hookbox构建的,用于管理web客户端和服务器之间的实时消息传递。Hookbox非常棒——它完全抽象了传输层,通过一个优雅的安全系统跨不同的通道公开了一个简单的发布/订阅接口

不幸的是,由于最初的维护人员甚至不愿意努力移交所有权,挂钩盒项目很快陷入混乱。(GRRR!)所以很难再考虑它是一个可行的平台。 什么是提供web应用程序实时通信的好平台?要求:

  • 使用HTML5 websockets或COMET(如果可用)进行跨浏览器的工作。传输选择应该对应用层不可见。我不在乎古代浏览器(IE6)
  • 从javascript和服务器端系统(即在php/python/ruby中)进行客户端访问——这是至关重要的
  • 提供具有任意有效负载的发布/订阅隐喻
  • 允许客户端查看连接到通道的其他客户端,即状态
  • 通过对任何web应用程序的回调进行细粒度访问控制(很好)

我听说socket.io可以做一些这方面的工作,但我感觉它位于堆栈的较低层。它可以连接到非javascript库吗?做认证吗?

在过去的8个月里,我有一个非常好的经验。服务器端组件对我来说非常稳定——我可以让它以非常高的消息量运行,它的驻留内存从来不会超过20MB。到目前为止,我只能让它运行大约4周而不终止服务器,但那只是因为我需要更新服务器端代码

使用HTML5 websockets或COMET(如果可用)进行跨浏览器的工作。传输选择应该对应用层不可见。我不在乎古代浏览器(IE6)

提供具有任意有效负载的发布/订阅隐喻

IO也是一款很棒的软件。它正在积极开发中,并使用“on”(订阅)和“emit”(发布)的EventEmitter(NodeJS)语义构建了一个简单的pub/sub样式的抽象。对于正在使用的传输,它在客户端也是非常透明的。我使用它主要是为了支持直接的WebSocket,但它可以回退到基于Flash的套接字、xhr轮询和jsonp轮询

从javascript和服务器端系统(即在php/python/ruby中)进行客户端访问——这是至关重要的

NodeJS是JavaScript,在V8引擎上运行。它有大量的功能,可以提供良好的抽象以及与外部组件的接口,例如数据库或消息队列等。至于使用php/python/ruby访问系统,它将与访问任何其他服务器一样工作。选择您的通信方法(基本TCP/IP,或者HTTP POST或GET,甚至通过文件系统),NodeJS并不真正关心谁提供数据。就我个人而言,我已经实现了一个C#客户端,它工作得非常好

允许客户端查看连接到通道的其他客户端,即状态

它没有任何内置的“状态”逻辑,尽管Socket.IO中已经有内置的“pub/sub”逻辑,您所要做的只是将状态存储在服务器上,以便新客户端可以检索现有的状态数据。我在保留状态的服务器上实现了我自己的基本发布/订阅,所有这些(包括NodeJS服务器代码和基本Socket.IO存根)总共只有50行JavaScript(包括空格)

通过对任何web应用程序的回调进行细粒度访问控制(很好)

不确定您所说的“通过回调任何web应用程序进行细粒度访问控制(很好)”是什么意思。他们的pub/sub事件/observer隐喻使用回调,因此您可以将特定的操作挂接到特定的事件

你知道吗


我还没有必要为我们的系统进行任何身份验证,所以我不能直接与它对话。然而,如果你浏览NodeJS模块,你会注意到有很多auth模块可用,包括LDAP和OAuth,更不用说声称做“OpenId、Google、OAuth、Twitter、LinkedIn、Yahoo、Readability、Dropbox、Justin.tv、Vimeo、Tumblr、OAuth2、Facebook、GitHub、Instagram、Foursquare、Box.net、LDAP”

虽然我还没有尝试过,但我开始寻找Node Knockout 2011条目。除了JavaScript之外,它还支持以下非js客户端:

  • 目标-C
  • 动作脚本
  • .NET和Silverlight
  • 红宝石
  • 阿杜伊诺

如果可以通过第三方发送消息,您可以使用他们的沙箱计划免费尝试该服务(20个连接&每天最多10万条消息),看看它是否满足您的需求。(我对“存在”的要求有点不确定,尽管文档中可能会涉及到它。)

我建议使用它,因为它有很多用于各种事情的库。一个用于实时消息传递的库是。我在这方面没有太多经验,但我已经尝试过了,我想说它工作得很好,并且拥有您所需要的一切。

看起来不支持任何非javascript客户端或具有任何类型的访问控制。访问控制很可能可以使用node.js的其他库进行。当我解释你的问题时,你需要从浏览器和服务器端程序访问。如果在node.js中编写服务器,则两者都有。我误解你了吗?是的,你误解了。我在寻找一个解决方案,而不是让我构建解决方案的API。当然,使用REST接口将消息发布到发布/订阅系统中非常容易。硬而重要的部分是将实时消息推送到非javascript客户端。将实时回调转换成其他语言需要一个no