扭曲的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/echohttp://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?有什么区别?

TypeFactories per portAllows mixing native web contentFactories per connection
SockJSFactorySingleNoSingle
SockJSMultiFactoryMultipleNoSingle
SockJSResourceMultipleYesSingle
SockJSMultiplexResourceMultipleYesMultiple

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许可证提供。

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

推荐PyPI第三方库


热门话题
JavaEclipse巨大的CPU峰值   java如何修复错误“上次成功发送到服务器的数据包是0毫秒前的。驱动程序尚未从服务器接收到任何数据包”   Java算法的C等价加密   java jackson序列化程序在禁用注释时引发NullPointerException   java制作了一种使用星星创建X为正方形的图像的方法   java软键盘切断了EditText/TextInputText控件的底部   java如何在jboss eap 7.3上启用cors?   摆动Java排列不规则形状   java逻辑Maven版本编号   在JShell中,如何评估整个java代码?   servlets对Java war文件进行签名并包含清单是有效的。MF在<warroot>/METAINF中   java在JTable中添加背景图像   java未收到来自服务器的响应   java解析Weblogic依赖项在编译时工作正常,但在运行时失败   带有两个Android应用程序模块的java Gradle项目   java有没有一种方法可以编写一个执行预定义手势和动作的应用程序?   java为什么finish()使所有活动都不能返回到以前的活动?   选项卡窗格的Java Swing makeTextPanel()方法