扭曲的Sockjs包装
txsockjs的Python项目详细描述
一个简单的库,用于向twisted应用程序添加sockjs支持。
状态
Sockjs Twisted通过了所有的SockJS-Protocol v0.3.3测试, 以及所有的SockJS-Client qunit测试。它已经用于 生产环境,并且应该没有任何关键的bug。
用法
使用txsockjs.factory.SockJSFactory包装工厂。就这样!
fromtwisted.internetimportreactorfromtwisted.internet.protocolimportFactory,Protocolfromtxsockjs.factoryimportSockJSFactoryclassHelloProtocol(Protocol):defconnectionMade(self):self.transport.write('hello')self.transport.write('how are you?')defdataReceived(self,data):printdatareactor.listenTCP(8080,SockJSFactory(Factory.forProtocol(HelloProtocol)))reactor.run()
没有别的,没有特殊的设置。
你想要一个安全的连接吗?使用listenSSL()而不是listenTCP()。
高级用法
对于那些希望在一个端口上托管多个sockjs服务的用户, txsockjs.factory.SockJSMultiFactory设计用于为您处理路由。
fromtwisted.internetimportreactorfromtwisted.internet.protocolimportFactory,Protocolfromtxsockjs.factoryimportSockJSMultiFactoryfromtxsockjs.utilsimportbroadcastclassEchoProtocol(Protocol):defdataReceived(self,data):self.transport.write(data)classChatProtocol(Protocol):defconnectionMade(self):ifnothasattr(self.factory,"transports"):self.factory.transports=set()self.factory.transports.add(self.transport)defdataReceived(self,data):broadcast(data,self.factory.transports)defconnectionLost(self,reason):self.factory.transports.remove(self.transport)f=SockJSMultiFactory()f.addFactory(Factory.forProtocol(EchoProtocol),"echo")f.addFactory(Factory.forProtocol(ChatProtocol),"chat")reactor.listenTCP(8080,f)reactor.run()
http://localhost:8080/echo和http://localhost:8080/chat将为您提供访问权限 你的回声工厂和聊天工厂。
与网站集成
可以提供静态资源、动态页面和sockjs端点 使用txsockjs.factory.SockJSResource的单个端口。
fromtwisted.internetimportreactorfromtwisted.internet.protocolimportFactory,Protocolfromtwisted.webimportresource,serverfromtxsockjs.factoryimportSockJSResource# EchoProtocol and ChatProtocol defined aboveroot=resource.Resource()root.putChild("echo",SockJSResource(Factory.forProtocol(EchoProtocol)))root.putChild("chat",SockJSResource(Factory.forProtocol(ChatProtocol)))site=server.Site(root)reactor.listenTCP(8080,site)reactor.run()
多路复用[实验] < /H2>
Sokjs扭曲也有内置的多路复用支持。见 Websocket-Multiplex库 对于如何集成多路复用客户端。
fromtwisted.internetimportreactorfromtwisted.internet.protocolimportFactory,Protocolfromtwisted.webimportresource,serverfromtxsockjs.multipleximportSockJSMultiplexResourcemultiplex=SockJSMultiplexResource()multiplex.addFactory("echo",Factory.forProtocol(EchoProtocol))multiplex.addFactory("chat",Factory.forProtocol(ChatProtocol))root=resource.Resource()root.putChild("multiplex",multiplex)site=server.Site(root)reactor.listenTCP(8080,site)reactor.run()
单一工厂?多因素?资源?Multiplexing?有什么区别?
Type | Factories per port | Allows mixing native web content | Factories per connection |
---|---|---|---|
SockJSFactory | Single | No | Single |
SockJSMultiFactory | Multiple | No | Single |
SockJSResource | Multiple | Yes | Single |
SockJSMultiplexResource | Multiple | Yes | Multiple |
SockJSFactory建议在非web(http)应用程序中使用,以允许 本机Web连接。例如,irc服务器。只能有一个工厂 使用此方法侦听端口。sockjs端点在内部使用它。
SockJSMultiFactory建议用于具有 多种服务。这允许多个工厂监听一个端口。
SockJSResource建议在基于http的应用程序(如web服务器)中使用。
SockJSMultiplexResource建议用于pubsub应用程序,其中每个连接 需要和多家工厂谈谈。重写subscribe方法允许动态 如果您不提前知道服务器端需要什么,则创建工厂。
端点
<> P>与现有的库或程序集成,可以使用SoCKJS 以sockjs:tcp\:9090\:interface\=0.0.0.0:encoding=utf8:websocket=false形式作为终结点。 您可以将任何转义的端点传递给sockjs端点,以便用txsockjs包装它,并且您可以 通过将sockjsfactory指定为关键字参数来指定它的任何选项。 有关详细信息,请阅读 twisted documentation on endpoints。fromtwisted.internetimportreactorfromtwisted.internet.protocolimportFactory,Protocolfromtwisted.internet.endpointsimportserverFromString# Note that we don't have to import anything from txsockjs# HelloProtocol defined aboveendpoint=serverFromString(reactor,"sockjs:tcp\:8080")endpoint.listen(Factory.forProtocol(HelloProtocol))reactor.run()
选项
可以将选项字典传递到工厂以控制sockjs行为。
options={'websocket':True,'cookie_needed':False,'heartbeat':25,'timeout':5,'streaming_limit':128*1024,'encoding':'cp1252',# Latin1'sockjs_url':'https://d1fxtkz8shb9d2.cloudfront.net/sockjs-0.3.js','proxy_header':None}SockJSFactory(factory_to_wrap,options)SockJSMultiFactory().addFactory(factory_to_wrap,prefix,options)SockJSResource(factory_to_wrap,options)SockJSMultiplexResource(options)
- 网站:
- 是否支持WebSocket作为协议。对不支持WebSosits的代理或负载均衡器有用。
需要饼干:
- 是否设置了jsessionid cookie。导致使用的协议性能降低,因此除非负载平衡器需要,否则不需要它们。
- 心跳:
- 为保持连接打开而发送心跳消息的频率。除非您知道自己在做什么,否则不要增加此值。
- 超时:
- 底层协议断开之前连接之间的最大延迟< /dd>
- 流媒体限制:
- 在循环流协议之前,可以通过流协议发送多少字节。允许浏览器端垃圾回收以降低RAM使用率。 编码:
- 往来txsockjs的所有消息都应该是有效的utf-8。如果TXSockJS接收到的消息不是UTF-8,则返回此编码。
- sockjs\u网址:
- 要在iframes中使用的sockjs库的url。默认情况下,这是通过https提供的,因此不需要更改。
- 代理服务器头:
- 将代理的IP地址拔出的HTTP报头。离开没有得到任何代理的IP。除非您在您控制的代理后面,否则不要更改此设置。
许可证
Sockjs Twisted是(c)2012 Christopher Gamble,根据BSD许可证提供。