用于cyclone web服务器的sockjs python服务器

sockjs-cyclone的Python项目详细描述


SockJS-cyclone

https://badge.fury.io/py/sockjs-cyclone.pnghttps://secure.travis-ci.org/flaviogrossi/sockjs-cyclone.png?branch=masterhttps://pypip.in/d/sockjs-cyclone/badge.png

sockjs cyclone是 SockJS client libraryCycloneweb服务器上运行。

Sockjs旋风分离器在MIT license下释放。

What is SockJS?

SockJS是一个浏览器javascript库,它提供 类似WebSocket的对象。sockjs提供了一个连贯的、跨浏览器的javascript 创建低延迟、全双工、跨域通信的API 浏览器和Web服务器之间的通道,它始终跨 旧浏览器、错误配置或旧代理和防火墙等 使用其他传输作为回退机制。

Sockjs的主要功能:

  • 简单的API,尽可能接近WebSocket API;
  • 扩展和负载平衡技术;
  • 快速建立连接;
  • 客户端的纯javascript库,不需要flash;
  • 服务器端和客户端都可以进行非常广泛的代码测试。

SockJS Cyclone完全支持SockJS协议版本0.3.3。

What is Cyclone?

Cyclone是一个非常快速和可伸缩的web服务器框架 将Tornado API实现为Twisted协议。

How does it look like?

可以找到部署在heroku上的实时演示here

以下是echo服务器的一个小示例:

fromtwisted.internetimportreactorimportcycloneimportsockjs.cycloneclassEchoConnection(sockjs.cyclone.SockJSConnection):defmessageReceived(self,message):self.sendMessage(message)if__name__=="__main__":EchoRouter=sockjs.cyclone.SockJSRouter(EchoConnection,'/echo')app=cyclone.web.Application(EchoRouter.urls)reactor.listenTCP(8888,app)reactor.run()

客户摘录:

varsock=newSockJS('http://mydomain.com/echo');sock.onopen=function(){console.log('open');};sock.onmessage=function(e){console.log('message',e.data);};sock.onclose=function(){console.log('close');};sock.send('hello!');

完成示例can be found here

Multiplexing

SOCKJS旋风器支持多路复用(多个不同通道) 共享连接):

fromtwisted.internetimportreactorimportcyclonefromsockjs.cyclone.connimportSockJSConnection,MultiplexConnectionfromsockjs.cyclone.routerimportSockJSRouterclassAnnConnection(SockJSConnection):defmessageReceived(self,message):self.sendMessage('Ann received '+message)classBobConnection(SockJSConnection):defmessageReceived(self,message):self.sendMessage('Bob received '+message)classCarlConnection(SockJSConnection):defmessageReceived(self,message):self.sendMessage('Carl received '+message)if__name__=="__main__":multiplexConnection=MultiplexConnection.create(ann=AnnConnection,bob=BobConnection,carl=CarlConnection)echoRouter=SockJSRouter(multiplexConnection,'/echo')app=cyclone.web.Application(echoRouter.urls)reactor.listenTCP(8888,app)reactor.run()

websocket-multiplex 用于客户端支持的库,以及complete example

Installation

从pypi安装:

pip install sockjs-cyclone

或从最新来源获得:

git clone https://github.com/flaviogrossi/sockjs-cyclone.git
cd sockjs-cyclone
python setup.py install

SockJS-cyclone API

与sockjs cyclone的主要交互是通过两个类进行的 SockJSRouterSockJSConnection

SockJSConnection

SockJSConnection类表示与客户机和 包含应用程序的逻辑。其主要方法是:

  • connectionMade(request):与客户端的连接为 已建立;
  • messageReceived(message):从 客户机;
  • sendMessage(message):要向 客户机;
  • close():关闭连接;
  • connectionLost():与客户端的连接丢失或 显式关闭。

SockJSRouter

SockJSRouter类将请求路由到各种连接 根据url前缀。其主要方法是:

  • __init__(connection, prefix, user_settings):限定给定的连接 到给定的url前缀;
  • urls:用于初始化cyclone应用程序的只读属性 所有需要的sockjs url。

Deployment

SOCKJS服务器通常部署在反向代理和/或反向生产中。 负载平衡器。目前使用最多的选项是Nginx 以及HAProxy

对于heroku部署,请参见quickstart instructions here

Nginx

要完全支持对 sockjs cyclone服务器:将http协议版本设置为1.1和passing upgrade headers to the server。 所需配置的相关部分是:

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass          http://<sockjs_server>:<port>;
        proxy_http_version  1.1;
        proxy_set_header    Upgrade $http_upgrade;
        proxy_set_header    Connection "upgrade";
        proxy_set_header    Host $http_host;
        proxy_set_header    X-Real-IP $remote_addr;
    }

}

对于websocket支持,需要nginx 1.3.13或更高版本。

可以找到工作的nginx.conf示例in the examples directory

HAProxy

有关haproxy部署和负载平衡的完整示例,请参见 SockJS-NodeReadme

Credits

感谢:

  • Serge S.Koval负责龙卷风的实施;
  • Voismart S.r.l赞助该项目。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
带有接口参数的java反射和构造函数   java Spring Thymeleaf如何通过Thymeleaf表单编辑(更新)用户选择的实体(对象)?   Java Tapestry中不同类之间的静态、非静态和调用   java如何使用dojo 1.9显示地理地图   安卓如何在java中简化这个代码片段?   尝试将java spring应用程序部署到Oracle weblogic群集java时出错。lang.ArrayIndexOutofBounds异常:52304   java如何在标头中包含SOAP身份验证详细信息?   java使用流删除一个列表中的元素(如果存在于另一个列表中)   java如何将包含UTC时间的字符串(如“193526”(19:35:26)转换为本地时区?   java部署Grailsgenerated WAR文件的最简单方法是什么?   java使用两种类型向通用列表添加对象   java如何在安卓应用程序中保存应用程序数据?   java有人能帮我弄清楚如何从“:”(不包括)读取我的文件直到行尾吗?   java在org上找不到javadoc。日食团队svn anywhere