首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解Autobahn与扭曲集成

理解Autobahn与扭曲集成
EN

Stack Overflow用户
提问于 2014-05-10 18:03:05
回答 1查看 1.2K关注 0票数 0

我试图理解这里给出的例子:https://github.com/tavendo/AutobahnPython/tree/master/examples/twisted/wamp/basic/pubsub/basic

我构建了这个脚本,它应该处理多个pub/ supposed连接,并为传入的控制消息打开一个tcp端口( 8123 )。当消息出现在8123端口上时,应用程序应该向所有连接的订阅者广播在端口8123上接收的消息。如何使NotificationProtocol或NotificationFactory与websocket对话,并使websocket服务器广播一条消息。

我不明白的另一件事是网址。客户端javascript连接到url http://:8080/ws。"ws“是从哪里来的?

还有人能解释一下RouterFactory,RouterSessionFactory的用途,以及这个bit:

代码语言:javascript
复制
from autobahn.wamp import types
session_factory.add( WsNotificationComponent(types.ComponentConfig(realm = "realm1" )))

我的代码如下:

代码语言:javascript
复制
import sys, time
from twisted.internet import reactor
from twisted.internet.protocol import Protocol, Factory
from twisted.internet.defer import inlineCallbacks
from autobahn.twisted.wamp import ApplicationSession
from autobahn.twisted.util import sleep


class NotificationProtocol(Protocol):
    def __init__(self, factory):
        self.factory = factory

    def dataReceived(self, data):
        print "received new data"

class NotificationFactory(Factory):
    protocol = NotificationProtocol

class WsNotificationComponent(ApplicationSession):
   @inlineCallbacks
   def onJoin(self, details):
      counter = 0
      while True:
         self.publish("com.myapp.topic1", "test %d" % counter )
         counter += 1
         yield sleep(1)



## we use an Autobahn utility to install the "best" available Twisted reactor
   ##
from autobahn.twisted.choosereactor import install_reactor
reactor = install_reactor()

## create a WAMP router factory
##
from autobahn.wamp.router import RouterFactory
router_factory = RouterFactory()

## create a WAMP router session factory
##
from autobahn.twisted.wamp import RouterSessionFactory
session_factory = RouterSessionFactory(router_factory)

from autobahn.wamp import types
session_factory.add( WsNotificationComponent(types.ComponentConfig(realm = "realm1" )))

from autobahn.twisted.websocket import WampWebSocketServerFactory
transport_factory = WampWebSocketServerFactory(session_factory)
transport_factory.setProtocolOptions(failByDrop = False)


from twisted.internet.endpoints import serverFromString
## start the server from an endpoint
##
server = serverFromString(reactor, "tcp:8080")
server.listen(transport_factory)

notificationFactory = NotificationFactory()
reactor.listenTCP(8123, notificationFactory)

reactor.run()
EN

回答 1

Stack Overflow用户

发布于 2014-05-12 00:33:35

“如何使NotificationProtocolNotificationFactory与websocket对话,并使websocket服务器广播消息”:

看看我对SO的另一个答案:扭曲中的持久连接。跳到示例代码,并将websocket逻辑建模为"IO“逻辑,您将得到一个很好的匹配(您也可能希望看到一个扭曲的核心团队对较新的端点调用的后续回答)。

"ws“是从哪里来的?

Websockets是通过重新请求http连接来实现的,根据其本质,http连接必须在请求中有一个特定的路径。"ws“路径通常会映射到autobahn为处理websockets而构建的一个特殊的http处理程序(或者至少这是javascript所期望的.)。假设设置正确,您实际上可以将您的web浏览器指向那个url,并且它应该会返回一个关于websocket握手的错误(在我的例子中是Expected WebSocket Headers,但我使用的是旋风 websockets而不是autobahn)。

P.S. "websockets必须有一个特定路径“的一个很酷的副作用是,您实际上可以将websockets和普通http内容混合在同一个处理程序/ must /端口上,当您试图在同一个SSL端口上运行它们时,这会变得非常方便,因为您试图避免代理前端代码的要求。

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

https://stackoverflow.com/questions/23584554

复制
相关文章

相似问题

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