python flask,有沒有網上python一對一-使用Python的Tornado框架實現一個一對一聊天的程序

 2023-11-10 阅读 30 评论 0

摘要:按思路來聊: 類似微信,點擊用戶可以進入一對一聊天頁面;另有聊天框列表包含所有存在聊天記錄的一對一聊天框,點擊進入聊天頁面。 python flask?【數據結構】 因為雙方都有聊天記錄,所以每一個聊天實際上得儲存兩份,設計的數據結構

按思路來聊:

類似微信,點擊用戶可以進入一對一聊天頁面;另有聊天框列表包含所有存在聊天記錄的一對一聊天框,點擊進入聊天頁面。

python flask?【數據結構】

因為雙方都有聊天記錄,所以每一個聊天實際上得儲存兩份,設計的數據結構如下:

A :

python編程。?

1

user_a= {“id”:1,”name”:”A”}

python類。B :

?

1

python爬蟲教程。user_b= {“id”:2,”name”:”B”}

A的聊天記錄:

?

python和java,1

chat_a= { “id”:1, “user”:1, “who”:2, “name”:”B”, “new”:0, msg:[]}

B的聊天記錄:

?

1

chat_b= { “id”:2, “user”:2, “who”:1, “name”:”A”, “new”:0, msg:[]}

msg實際上是個list,結構如下:msg = { “user”:發送者id, “name”:發送者name, “date”:發送時間, “content”:消息內容 }

【業務邏輯】

當A點擊好友列表中B的名字–>進入聊天框(根據雙方id通過字段user、who找到對應chat_a,chat = coll.find_one({“user”:user_a["id"], “who”:user_b["id"]});如果該chat不存在,則利用雙方id創建chat_a)

發送消息(更新chat_a和chat_b,如果chat_b不存在則創建chat_b;如果chat_b不在線則更新chat_b["new"] = 1)

A刪除聊天框(刪除chat_a)

【記錄客戶端連接】

由于是多個一對一聊天,所以不能直接用教程里的set來記錄連接。

最后的決定是用一個 dict,用雙方用戶id拼接的字符串作為key,用list存客戶端連接。

...SocketHandler(...):

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

chats= dict()

...

def on_open(self):

...

#通過雙方id來生成一個獨一無二的字符串

min = user_a["id"]

max = user_b["id"]

if min >max:

max = user_a["id"]

min = user_b["id"]

key= str(user_a["id"])+"_"+str(user_b["id"])

#判斷當前會話是否存在,存在則添加當前用戶

if keyin chats:

SocketHandler.chats[key].append(self)

#不存在則創建會話,并將當前用戶添加進去

else

SocketHandler.chats[key]= [self]

【發送消息】

從客戶端調用send函數,在服務端on_message函數中接受參數后更新雙方聊天記錄。之后調用send_to_all(key, message)來更新聊天窗口。

【發通知/更新聊天窗口】

更新數據庫里的聊天記錄后還要在聊天窗口更新html,所以需要通知該會話的連接者。

根據我們記錄連接者的方式,對應的通知函數如下:

?

1

2

3

def send_to_all(key,message):

for userin SocketHandler.chats[key]:

user.write_message(json.dumps(message))

【關閉連接】

根據我們記錄連接者的方式,對應的關閉函數如下:

?

1

2

3

4

5

6

7

def on_close(self):

...

#用on_open函數中的方法構造key

if keyin SocketHandler.chats:

SocketHandler.chats[key].remove(self)#刪除當前連接

if len(SocketHandler.chats[key])== 0:

del SocketHandler.chats[key]#當會話無連接者則刪除會話

經過上面的改造,就實現多個一對一聊天功能

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/4/170051.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息