关于Django ets的小问题和应用程序。在谷歌服务让我进入聊天室,在那里人们可以连接并开始聊天。但我不知道一个用户如何向另一个用户发送即时消息。在
例如:
1)我把约翰添加到朋友中,想开始聊天。 2) 在服务器端,我可以生成objectroom,以我和John为成员。 3) 当我通过WebSocket向这个房间发送消息时,我知道这条消息是谁的,但我不知道如何获得John's channel
@channel_session_user_from_http
def ws_connect(message):
rooms_with_user = Room.objects.filter(members=message.user)
for r in rooms_with_user:
Group('%s' % r.name).add(message.reply_channel)
@channel_session_user
def ws_receive(message):
prefix, label = message['path'].strip('/').split('/')
try:
room = Room.objects.get(name=label)
except Exception, e:
room = Room.objects.create(name=get_random_string(30))
for u in message.chmembers:
room.members.add(u)
# here can be somethis like this
# try
reply_channel = Channels.objects.get(online=True, user=u)
Group('%s' % r.name).add(reply_channel)
Group('%s' % room.name).send({
"text": "%s : %s" % (message.user.username, message['text']),
})
@channel_session_user
def ws_disconnect(message):
prefix, label = message['path'].strip('/').split('/')
Group(label).discard(message.reply_channel)
只需为用户对创建“自动唯一房间”。其余的保持不变。比如这样
给它两个user对象,它将为这对用户返回一个唯一的房间,为
User.id
排序,类似于“chat-1-2”,用于User.id
“1”和“2”的用户。在一个用户和一个登录的用户之间仍然可以得到更多的消息。在
您可以从
message.user
获取经过身份验证的用户的对象。在对于接收用户对象,我只发送了
^{pr2}$username
以及消息。然后,您可以从message['text']
中解压它,方法与解压实际消息的方式相同。在这样,您就可以从示例中删除所有“room”内容,包括
room
表等,因为组名总是在两个用户之间发送消息时动态创建的。在另一件重要的事情是:一个用户比另一个用户连接得晚,可能会错过初始消息。因此,当您连接时,您可能需要检查一些“chat_messages”数据库表,获取用户对之间最后10或20条消息,然后将这些消息发送回。这样用户就可以重温他们过去的对话。在
相关问题 更多 >
编程相关推荐