首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将SockJS与其他web框架集成

如何将SockJS与其他web框架集成
EN

Stack Overflow用户
提问于 2012-05-04 01:24:00
回答 3查看 3.6K关注 0票数 7

作为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框架)来实现这一点的任何方向都是非常受欢迎的。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-08 18:50:05

你说得对,对于SockJS,你需要一个支持sockjs的服务器和一个浏览器内的javascript客户端库。

通常有两种集成模式,假设您想使用sockjs-tornado:

  1. 你可以让你的所有网站从龙卷风中获得服务。然后,将sockjs-tornado挂到某个路径上,例如'http://mysite.com/sockjs'‘。在这种情况下,您的网站和sockjs都将从sockjs域提供服务。
  2. 您可以使用任何编写的语言/框架保存您的站点,并将sockjs- served作为另一个组件添加到不同的域中,例如。'http://sockjs.mysite.com/sockjs'.

此外,您可以使用这种方式的任何变体-例如:在内部拥有两个服务器,但通过使用智能加载器(如haproxy)将它们公开为一个域。

票数 4
EN

Stack Overflow用户

发布于 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):

代码语言:javascript
复制
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'   

代码语言:javascript
复制
urls=[
    (r'/', PostHandler),
    (r'/token', TokenHandler),
    (r'/realtime', DistributeHandler)]

请注意,我必须删除DistributeHandler URLSpec中的regex组,因为sockJS-tornado被它卡住了。我还在尝试弄清楚如何从on_open处理程序的路径中获取参数。

票数 1
EN

Stack Overflow用户

发布于 2013-02-07 16:53:17

这提供了关于如何将SockJS集成到Django中的完整答案:https://stackoverflow.com/a/10950702/675065

基本上,您需要:

布鲁克瓦龙卷风+ SockJS-Tornado

  • Redis +

我在我自己的项目中使用了这个配置,它工作得很好。

或者:你可以尝试高速公路的方式:http://autobahn.ws/ (我还没有尝试过)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10436371

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档