如何在基于 Django websockets 的实时聊天机器人中向 PostgreSQL 添加数据?



我正在尝试使用Django后端和Angular 4前端与PostgreSQL数据库创建实时聊天。假设我想创建聊天机器人,例如A.L.I.C.E。在我看来,最好的解决方案是使用 websockets?我使用Redis创建通道层。现在,我想将所有消息保存到我的PostgreSQL数据库中。我想知道应该如何做。我应该创建模型并在consumers.py中使用它们,还是有另一种更优化的方法?将来我想分析数据库中的数据并返回答案。

consumers.py:

# In consumers.py
from channels import Group
# Connected to websocket.connect
def ws_connect(message):
# Accept the connection
message.reply_channel.send({"accept": True})
# Add to the chat group
Group("chat").add(message.reply_channel)
# Connected to websocket.receive
def ws_receive(message):
Group("chat").send({
"text": message.content['text'],
})
print(message.content['text'])
# Connected to websocket.disconnect
def ws_disconnect(message):
Group("chat").discard(message.reply_channel)

routing.py:

from channels.routing import route
from backend.consumers import ws_connect, ws_receive, ws_disconnect
channel_routing = [
route("websocket.connect", ws_connect),
route("websocket.receive", ws_receive),
route("websocket.disconnect", ws_disconnect),
]

settings.py:

CHANNEL_LAYERS = {
"default": {
# This example app uses the Redis channel layer implementation asgi_redis
"BACKEND": "asgi_redis.RedisChannelLayer",
"CONFIG": {
"hosts": [(redis_host, 6379)],
},
"ROUTING": "backend.routing.channel_routing",
},
}

我遇到了同样的问题,因此请在您的models.py中创建一个模型,例如Message模型。

class Message(models.Model):
message = models.TextField()

并将其导入consumers.py

#consumers.py
from .models import Message
def ws_receive(message):
Group("chat").send({
"text": message.content['text'],
})
msg = Message()
msg.message = message.content['text']
msg.save()

但是,如果您在生产中使用此代码段,它将影响您的数据库性能。但正如我所听说的,您可以使用 python 模块多处理创建某种队列并从该队列中保存消息。我还没有看到自定义队列的实现,所以你应该自己做。

最新更新