所以我有一个Django应用程序,其中我使用频道来实现实时聊天。我的消费者看起来像这样:
导入json从asgiref.sync导入async_to_sync从channels.generic.websocket导入WebSocket消费者
class ChatConsumer(WebsocketConsumer):
def connect(self):
self.room_name = self.scope['url_route']['kwargs']['room_name']
self.room_group_name = 'chat_%s' % self.room_name
# Join room group
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name
)
self.accept()
def disconnect(self, close_code):
# Leave room group
async_to_sync(self.channel_layer.group_discard)(
self.room_group_name,
self.channel_name
)
# Receive message from WebSocket
def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
username = self.scope["user"]
# Send message to room group
async_to_sync(self.channel_layer.group_send)(
self.room_group_name,
{
'type': 'chat_message',
'message': message,
'user': username.username
}
)
# Receive message from room group
def chat_message(self, event):
message = event['message']
user=event['user']
print(user)
# Send message to WebSocket
self.send(text_data=json.dumps({
'message': message,
'user':user
}))
因此,我正在寻找一种方法来保存发送的消息(因为当前它们在刷新时丢失)。我已经创建了一个消息模型,其中消息文本有一个CharField。如果我在聊天室信息功能中这样做,我想我可以保存新信息:
new_message=Messages(text=message)
new_nessage.save()
我的问题是,每当用户连接到聊天时,我如何预载最后10条消息?
因此,为了做到这一点,我最终在“接收”功能中将我的消息保存到数据库中(因为如果将其保存在chat_message one中,则会为每个活动用户保存1次)。然后为了预加载消息,我在每次打开websocket时都使用AJAX调用,以便使用python函数获取最近的10条消息,然后我将这些消息作为JsonResponse传递回来(https://simpleisbetterthancomplex.com/tutorial/2016/08/29/how-to-work-with-ajax-request-with-django.html 向下滚动到本文的AJAX请求部分,按此顺序查看signup.html、url.py和views.py文件,以供参考)。
控制台-频道-聊天-发消息 接口URL {youke-url}/console/Index.php?c=live&a=setComment×tamp=1607677497&access_key=abc&sign=5c734d046a244b27ffa74a4235a45a1b3ada5ec7 请求方式 POST Content-Type form-data 请求Query参数 参数 示例
控制台-频道-聊天-删除消息 接口URL {youke-url}/console/Index.php?c=live&a=deleteComment×tamp=1607677497&access_key=abc&sign=6513239c21beabd37f043d8f8c85ad655afcada0 请求方式 POST Content-Type form-data 请求Query参数 参
控制台-频道-聊天-获取消息 接口URL {youke-url}/console/Index.php?c=live&a=getComment×tamp=1607677497&access_key=abc&sign=97d791101db8600e162935d43cc63f0e3510cb98 请求方式 POST Content-Type form-data 请求Query参数 参数 示
如何在聊天客户端发送媒体消息?我使用的是JS SDK,基于教程https://www.twilio.com/docs/api/chat/guides/media-support,但是出现了错误。我使用的方法如下所示: 错误消息:
我正试图通过电报聊天发送消息。我希望电报设置只能通过官方用户界面完成,因为我希望它可能由最终用户完成。 以下是我所做的电报设置: 我通过获得令牌创建了机器人 我创建了一个通道: 点击"新频道" 通道名称: 点击下一步 选择私人频道 点击保存 添加我的机器人 点击制作管理员 点击保存 打开频道 在频道菜单上,选择“管理频道” 单击讨论中的“添加组” 单击“创建新组” 组名: 单击“创建” 单击“保存
我正在尝试使用node.js、socket.io和express制作一个简单的聊天应用程序。但是,如果我单击main.jade文件中的send按钮,页面会刷新,并且不会出现任何消息。我在Firebug中也遇到这个错误: 加载页面时,与ws:/127.0.0.1:3000/socket.io/?eio=2&transport=websocket&sid=d_hnmpdxhed-j7lraaah的连接