Python Django中的Websocket握手错误。

5
我在WebSocket连接时遇到了问题,因为它由于握手错误而被关闭。错误消息如下:
WebSocket HANDSHAKING /ws/polData/ [127.0.0.1:59304]
Exception inside application: object.__init__() takes exactly one argument (the instance to initialize)
Traceback (most recent call last):
  File "/usr/lib/python3.7/site-packages/channels/routing.py", line 71, in __call__
    return await application(scope, receive, send)
  File "/usr/lib/python3.7/site-packages/channels/sessions.py", line 47, in __call__
    return await self.inner(dict(scope, cookies=cookies), receive, send)
  File "/usr/lib/python3.7/site-packages/channels/sessions.py", line 172, in __call__
    return await self.inner(self.scope, receive, self.send)
  File "/usr/lib/python3.7/site-packages/channels/auth.py", line 181, in __call__
    return await super().__call__(scope, receive, send)
  File "/usr/lib/python3.7/site-packages/channels/middleware.py", line 26, in __call__
    return await self.inner(scope, receive, send)
  File "/usr/lib/python3.7/site-packages/channels/routing.py", line 160, in __call__
    send,
  File "/usr/local/lib/python3.7/dist-packages/asgiref/compatibility.py", line 33, in new_application
    instance = application(scope)
  File "/usr/lib/python3.7/site-packages/channels/generic/websocket.py", line 159, in __init__
    super().__init__(*args, **kwargs)
TypeError: object.__init__() takes exactly one argument (the instance to initialize)
WebSocket DISCONNECT /ws/polData/ [127.0.0.1:59304]\
3个回答

17

请检查应用中的routing.py文件,

在websocket_urlpatterns下的repath上,可能错过了.as_asgi()。

例如:

websocket_urlpatterns = [

    re_path(r'ws/chat/(?P<room_name>\w+)/$', consumers.ChatConsumer.as_asgi()),
]

你好@Shaheen - 你在Django/channels领域可以提供自由咨询服务吗?我们公司位于新加坡,正在寻找印度的Django开发人员。 - oktested

1
在routing.py中,对于Python 3.6以上的版本,需要使用"as_asgi()"。
以下是我解决问题并保持兼容不同版本的方法。
if float(platform.python_version()[0:3]) > 3.6:
    cons = consumers.myConsumer.as_asgi()
else:
    cons = consumers.myConsumer

websocket_urlpatterns = [
    path("ws/example/", cons),
]

0
websocket_urlpatterns = [
    path("ws/example/", cons.as_asgi()),
]

3
如果你解释一下这段代码在做什么,那么这个回答会更有帮助。 - micpap25

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接