作为Socket.io的替代品,还有SockJS (https://github.com/sockjs/sockjs-client),它似乎比Socket.io维护得更好,也更稳定。
这个问题是关于概念性地理解通过web框架使用SockJS的体系结构,例如,用于构建聊天应用程序
我目前的理解是,您需要SockJS客户端和SocketJS服务器(在我的例子中,我打算使用SockJS-Tornado (https://github.com/MrJoes/sockjs-tornado))才能进行websockets风格的通信。
但是SockJS (SockJS-client + SockJS-Tornado)是如何与web框架捆绑在一起的呢?web框架完成了剩下的工作(例如,为页面提供服务,对数据库的写入/读取等)。例如,SockJS-Tornado组件如何与框架的web服务器通信?特别是,使用web2py (一种python web框架)来实现这一点的任何方向都是非常受欢迎的。
发布于 2012-05-08 18:50:05
你说得对,对于SockJS,你需要一个支持sockjs的服务器和一个浏览器内的javascript客户端库。
通常有两种集成模式,假设您想使用sockjs-tornado:
此外,您可以使用这种方式的任何变体-例如:在内部拥有两个服务器,但通过使用智能加载器(如haproxy)将它们公开为一个域。
发布于 2012-05-29 08:09:57
如果你正在使用web2py作为一个框架,你可以在gluon/contrib中寻找一个comet_messaging.py。它提供了一个函数(comet_send),用于将消息从web2py应用程序发送到您的websocket客户端。它基于tornado (没有SockJS支持),但是DistributeHandler可以继承SockJS连接以提供后备传输支持。在这种方法中,客户机通过典型的GET或POST HTTP请求发送消息,这些请求由web2py控制器(或其他框架)处理,并从调用comet_messaging.comet_send()的web2py控制器接收消息,后者向tornado实例发送post请求,然后将请求发送到其侦听器列表。
comet_messaging中修改后的代码行如下所示(请注意,open变成了on_open):
class DistributeHandler(sockjs.tornado.SockJSConnection):
def on_open(self, r):
group,token,name = [None, None, None]
self.group = group or 'default'
self.token = token or 'none'
self.name = name or 'anonymous' 和
urls=[
(r'/', PostHandler),
(r'/token', TokenHandler),
(r'/realtime', DistributeHandler)]请注意,我必须删除DistributeHandler URLSpec中的regex组,因为sockJS-tornado被它卡住了。我还在尝试弄清楚如何从on_open处理程序的路径中获取参数。
发布于 2013-02-07 16:53:17
这提供了关于如何将SockJS集成到Django中的完整答案:https://stackoverflow.com/a/10950702/675065
基本上,您需要:
布鲁克瓦龙卷风+ SockJS-Tornado
我在我自己的项目中使用了这个配置,它工作得很好。
或者:你可以尝试高速公路的方式:http://autobahn.ws/ (我还没有尝试过)
https://stackoverflow.com/questions/10436371
复制相似问题