用于cyclone web服务器的sockjs python服务器
sockjs-cyclone的Python项目详细描述
目录
SockJS-cyclone
sockjs cyclone是 SockJS client library 在Cycloneweb服务器上运行。
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的主要交互是通过两个类进行的 SockJSRouter和SockJSConnection。
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。