用于聊天应用程序的多个 websocket 实例
multiple websocket instances for chat application
我正在构建一个 Django-Vue 聊天应用程序,我已经构建了该应用程序的核心功能。
安装 SideBar 组件后,会发出 HTTP 请求以获取用户参与的所有房间,当单击某个房间时,会在聊天组件上创建 WebSocket 实例。
我的疑问是,如果我向那个房间发送消息,但其他用户未在同一房间连接(假设他们在其他房间连接),他们将不会收到消息,对吗?那么我如何向他发送有关新消息的通知?比如 Whatsapp 侧边栏通知。
我想创建两个 WebSocket 连接,一个在 SideBar 上作为用户端点 (ws:127.0.0.1:8000/chat/$Username
),另一个用于实际的聊天室 (ws:127.0.0.1:8000/chat/$ChatId
),这样好吗方法?
我的 django 模型 =>
from django.db import models
from account.models import CustomUser
class Message(models.Model):
sender = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='messages')
message = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'message from {self.sender.username}'
class Chat(models.Model):
name = models.CharField(max_length=24)
participants = models.ManyToManyField(CustomUser, blank=True)
messages = models.ManyToManyField(Message, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
您可以使用 WSS 作为传输层,但实现您自己的逻辑协议。
当然,您可以使用多个连接,但这是多余的。
让我们使用类似“事件”的东西。
例如,对于连接到聊天室的用户,您可以发送“连接”事件:
{
"event": "connection",
"user": {
"id": 1,
"username": "Foo",
...
}
}
您可以通过简单的方法处理此类事件:
if event == "connection":
...
elif event == "exit":
elif event == "message":
...
同样的方法,但在客户端使用 JS 代码。
因此您只能为 Vue 应用程序和 Django 处理一个连接。
我正在构建一个 Django-Vue 聊天应用程序,我已经构建了该应用程序的核心功能。
安装 SideBar 组件后,会发出 HTTP 请求以获取用户参与的所有房间,当单击某个房间时,会在聊天组件上创建 WebSocket 实例。
我的疑问是,如果我向那个房间发送消息,但其他用户未在同一房间连接(假设他们在其他房间连接),他们将不会收到消息,对吗?那么我如何向他发送有关新消息的通知?比如 Whatsapp 侧边栏通知。
我想创建两个 WebSocket 连接,一个在 SideBar 上作为用户端点 (ws:127.0.0.1:8000/chat/$Username
),另一个用于实际的聊天室 (ws:127.0.0.1:8000/chat/$ChatId
),这样好吗方法?
我的 django 模型 =>
from django.db import models
from account.models import CustomUser
class Message(models.Model):
sender = models.ForeignKey(CustomUser, on_delete=models.CASCADE, related_name='messages')
message = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f'message from {self.sender.username}'
class Chat(models.Model):
name = models.CharField(max_length=24)
participants = models.ManyToManyField(CustomUser, blank=True)
messages = models.ManyToManyField(Message, blank=True)
created_at = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.name
您可以使用 WSS 作为传输层,但实现您自己的逻辑协议。
当然,您可以使用多个连接,但这是多余的。 让我们使用类似“事件”的东西。 例如,对于连接到聊天室的用户,您可以发送“连接”事件:
{
"event": "connection",
"user": {
"id": 1,
"username": "Foo",
...
}
}
您可以通过简单的方法处理此类事件:
if event == "connection":
...
elif event == "exit":
elif event == "message":
...
同样的方法,但在客户端使用 JS 代码。
因此您只能为 Vue 应用程序和 Django 处理一个连接。