簡體   English   中英

sanic事件循環和高速公路

[英]sanic event loop and autobahn

我有一個用Sanic寫的項目

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

我的網站有一個實時操作部分

對於實時部分,我想使用高速公路循環的高速公路

我有自定義聊天協議

class ChatServerProtocol(WebSocketServerProtocol):
    ....

和聊天工廠:

class ChatFactory(WebSocketServerFactory):
    ...

我得到sanic事件循環並將工廠設置為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

問題

A:我可以為高速公路使用sanic事件循環嗎?

B:如果是,應該怎么做?

嗯。 這是一個復雜的問題要回答。 現在回答:不確定。

如果你看一下autobahn-python它指定它的twisted / asyncio,沒有找到uvloop的提及。 雖然我可能會補充一下,我認為如果你和我的一位同事在crossbar.io中討論這個問題討論這個討論應該是可能的。: https//github.com/crossbario/autobahn-python/issues/925

根據上面提到的問題925,您需要創建一個新的事件循環var以進入uvloop。

沒有自己試過,所以希望它有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM