【问题标题】:sanic event loop and autobahnsanic 事件循环和高速公路
【发布时间】:2017-12-03 16:34:56
【问题描述】:

我有一个用Sanic写的项目

application = Sanic(__name__)
...
application.run(host=application.config.HOST, port=application.config.PORT,
                debug=application.config.DEBUG, log_config=application.config.LOG)

我的网站有一个实时操作部分

对于实时部分,我想使用 autobahn 和 sanic 循环

我有自定义聊天协议

class ChatServerProtocol(WebSocketServerProtocol):
    ....

和聊天工厂:

class ChatFactory(WebSocketServerFactory):
    ...

我得到了健全的事件循环并将工厂设置为 ChatFactory

async def after_server_start(app, loop):
    factory = ChatFactory(u"ws://127.0.0.1:9000")
    factory.protocol = ChatServerProtocol

    loop.set_task_factory(factory)

以上代码失败:

Error: Bad Request
Traceback (most recent call last):
  File "httptools/parser/parser.pyx", line 296, in httptools.parser.parser.cb_on_message_complete (httptools/parser/parser.c:4868)
File "/Users/XXX/Documents/Projects/sanic_env/lib/python3.6/site-packages/sanic/server.py", line 227, in on_message_complete
self.execute_request_handler()
File "/Users/XXX/Documents/Projects/sanic_env/lib/python3.6/site-packages/sanic/server.py", line 234, in execute_request_handler
self.stream_response))
File "uvloop/loop.pyx", line 1146, in uvloop.loop.Loop.create_task (uvloop/loop.c:24809)
TypeError: __call__() takes 1 positional argument but 3 were given

问题

答:我可以在高速公路上使用 sanic 事件循环吗?

‌B:如果是,应该怎么做?

【问题讨论】:

    标签: python autobahn sanic


    【解决方案1】:

    嗯。这是一个复杂的问题要回答。现在回答:不确定。

    如果您查看autobahn-python,它指定它用于twisted/asyncio,没有发现提及uvloop。虽然我可能会补充一点,但我认为如果您在 crossbar.io 中与我的一位同事讨论这个讨论,我认为应该可以将 uvloop 替换为 asyncio:https://github.com/crossbario/autobahn-python/issues/925

    根据上面提到的问题925,您需要创建一个新的事件循环变量来接入 uvloop。

    自己没试过,希望对你有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多