【问题标题】:'WebSocketProtocol' object has no attribute 'application_queue' error Django Channels'WebSocketProtocol' 对象没有属性 'application_queue' 错误 Django Channels
【发布时间】:2018-05-02 10:16:10
【问题描述】:

在我的 Django 项目中,我想使用频道创建一个聊天应用程序。但是当我按照本教程进行操作时: https://channels.readthedocs.io/en/stable/tutorial/part_2.html,我遇到了连接后websocket自动断开连接的问题:

 Exception in callback AsyncioSelectorReactor.callLater.<locals>.run()
at
 C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\twisted\internet\asyncioreact
 or.py:287 handle: <TimerHandle when=19405.993
 AsyncioSelectorReactor.callLater.<locals>.run() at
 C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\twisted\interne
 t\asyncioreactor.py:287> Traceback (most recent call last):   File
 "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\asyncio\events.py",
 line 145, in _run
     self._callback(*self._args)   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\twisted\internet\asyncioreactor.py",
 line 290, in run
     f(*args, **kwargs)   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\twisted\internet\tcp.py",
 line 289, in connectionLost
     protocol.connectionLost(reason)   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\autobahn\twisted\websocket.py",
 line 128, in connectionLost
     self._connectionLost(reason)   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\autobahn\websocket\protocol.py",
 line 2467, in _connectionLost
     WebSocketProtocol._connectionLost(self, reason)   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\autobahn\websocket\protocol.py",
 line 1096, in _connectionLost
     self._onClose(self.wasClean, WebSocketProtocol.CLOSE_STATUS_CODE_ABNORMAL_CLOSE, "connection was
 closed uncleanly (%s)" % self.wasNotCleanReason)   File
 "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\autobahn\twisted\websocket.py",
 line 171, in _onClose
     self.onClose(wasClean, code, reason)   File "C:\Users\Administrator\AppData\Local\Programs\Python\Python36-32\lib\site-packages\daphne\ws_protocol.py",
 line 146, in onClose
     self.application_queue.put_nowait({ AttributeError: 'WebSocketProtocol' object has no attribute 'application_queue'

【问题讨论】:

  • 嗨,你能解决这个问题吗?
  • 不,我不是。 :(
  • 我已经修好了。此错误上方应该是路径列表,并且在该路径的顶部是真正的错误。就我而言,它是路由 url。
  • @EduardAlbu 你能发布你的解决方案吗?
  • 我已经修好了。在我的情况下关注@EduardAlbu,它没有迁移。

标签: django websocket django-channels


【解决方案1】:

迁移帮我解决

python manage.py migrate

【讨论】:

    【解决方案2】:

    此错误上方应该是路径列表,并且路径顶部是真正的错误。就我而言,它是路由 url。

    【讨论】:

    • 你们在开玩笑吗?任何阅读此问题和答案的人都不会知道问题出在哪里。答案就像,“去看医生,找到你的问题,祝你好运!!”
    【解决方案3】:

    只是为了向在为我遵循频道教程时遇到此错误的每个人澄清此错误,错误就在我的路径中

    2018-05-17 15:55:36,382 - 错误 - ws_protocol - [失败实例: Traceback: : 找不到路径的路径 'ws/聊天/me/'。

    你可以在堆栈跟踪的顶部找到它

    我定义的无效 URL 模式“嗡嗡声”,因为我喜欢改变它。本质上它的工作方式与 django url 模式相同,因此只需要确保您的路由结构与您指定的匹配。

    websocket_urlpatterns = [
        url(r'^ws/buzz/(?P<room_name>[^/]+)/$', consumers.ChatConsumer),
    ]
    

    在我的情况下,路由路径与我的 websocket 模式不匹配 我必须更新路由路径才能正确 -> 通过将我的 websocket_urlpatterns 更改回聊天

    websocket_urlpatterns = [
        url(r'^ws/chat/(?P<room_name>[^/]+)/$', consumers.ChatConsumer),
    ]
    

    所以系统可以解决我的问题。希望它可以帮助将来遇到此问题的人。祝你好运。 P.T.

    【讨论】:

      猜你喜欢
      • 2017-01-22
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 2020-01-16
      • 2018-09-13
      • 2014-08-31
      • 2011-06-23
      • 2013-01-27
      相关资源
      最近更新 更多