龙卷风和Autobahn-python在同一个端口上收听

时间:2014-04-23 21:14:19

标签: python tornado autobahn python-asyncio wamp-protocol

最近我开始了一个小型的个人项目。这是一个基于asyncio和autobahn-python的实时网络系统。但是我也希望通过HTTP提供一些静态文件,并从同一个进程执行。我的HTTP服务器是坐在asyncio事件循环之上的Tornado,除了我必须在不同的端口上启动龙卷风和高速公路处理程序之外,一切都运行得很好。这是我目前所拥有的精简版本:

import six
import datetime
import asyncio

import tornado.web
import tornado.httpserver
import tornado.netutil
from tornado.platform.asyncio import AsyncIOMainLoop

from autobahn.wamp import router
from autobahn.asyncio import wamp, websocket


# WAMP server
class MyBackendComponent(wamp.ApplicationSession):
    def onConnect(self):
        self.join(u"realm1")

    @asyncio.coroutine
    def onJoin(self, details):
        def utcnow():
            now = datetime.datetime.utcnow()
            return six.u(now.strftime("%Y-%m-%dT%H:%M:%SZ"))

        reg = yield from self.register(utcnow, 'com.timeservice.now')


# HTTP server
class MainHandler(tornado.web.RequestHandler):
    def get(self):
        self.write("Hello, world!")


tornado_app = tornado.web.Application(
    [
        (r"/", MainHandler),
    ],
)


if __name__ == '__main__':
    router_factory = router.RouterFactory()
    session_factory = wamp.RouterSessionFactory(router_factory)
    session_factory.add(MyBackendComponent())
    transport_factory = websocket.WampWebSocketServerFactory(session_factory,
                                                             debug=True,
                                                             debug_wamp=True)

    AsyncIOMainLoop().install()

    tornado_app.listen(80, "127.0.0.1")

    loop = asyncio.get_event_loop()
    coro = loop.create_server(transport_factory, "127.0.0.1", 8080)
    server = loop.run_until_complete(coro)

    try:
        loop.run_forever()
    except KeyboardInterrupt:
        pass
    finally:
        server.close()
        loop.close()

问题:是否有正确的方法让高速公路 - wamp和龙卷风处理程序在同一个端口上监听?
我最初的想法是实现某种类型的socket.socket包装并在那里发送传入的消息,但事实证明它非常混乱。我不想使用任何外部代理,因为后端应尽可能便携 另外,我不是要求任何人为我实施它(当然,如果你愿意的话,你也可以!) - 只知道在潜入高速公路/龙卷风代码之前是否有人做过类似的事情。
提前谢谢!
PS:抱歉我的英语不好 - 这不是我的母语。

0 个答案:

没有答案