繁体   English   中英

WebSocket 使用 Django 创建聊天应用程序时出现连接错误

[英]WebSocket connection error when creating a chat application with Django

我正在开发一个类似于 whatsapp web 克隆的聊天应用程序。 我一直在处理 websocket 连接,因为它无法连接到指定地址。 我收到错误WebSocket connection to 'ws://127.0.0.1:8000/ws/2/' failed: 指定的 url 是因为我在 consumers.py 文件中使用用户 id 创建房间名称。
这是 consumers.py 文件的一部分:

class PersonalChatConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        my_id = self.scope['user'].id
        other_user_id = self.scope['url_route']['kwargs']['id']
        if int(my_id) > int(other_user_id):
            self.room_name = f'{my_id}-{other_user_id}'
        else:
            self.room_name = f'{other_user_id}-{my_id}'

        self.room_group_name = 'chat_%s' % self.room_name

        await self.channel_layer.group_add(
            self.room_group_name,
            self.channel_name
        )

在 asgi.py 文件中,我有这段代码;

application = ProtocolTypeRouter({
    'websocket': AuthMiddlewareStack(
        URLRouter([
            path('ws/<int:id>/', PersonalChatConsumer)
        ])
    )
})

这也是处理 websocket 连接的 javascript 文件的一部分:

const id = JSON.parse(document.getElementById('json-username').textContent);
const message_username = JSON.parse(document.getElementById('json-message-username').textContent);

const socket = new WebSocket(
    'ws://'
    + window.location.host
    + '/ws/'
    + id
    + '/'
);

VsCode 控制台中的错误消息指出Not Found: /ws/2/ 这里还有 urls 文件:

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include(('accounts.urls', 'accounts'), namespace='accounts')),
    path('', index, name='home'),
    path('<str:username>/', chatPage, name='chat'),
]

任何帮助将不胜感激。 谢谢

我终于设法解决了这个问题。 我意识到除了 redis 服务器之外,一切正常。 我通过直接运行 redis-server 而不是使用 docker 解决了这个问题。这是为我提供解决方案的问题的链接: 在 Django 频道上避免 Docker 的方式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM