日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

基于MQTT的python聊天室

發布時間:2023/12/20 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于MQTT的python聊天室 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1、內容

本實驗做的是基于MQTT的聊天室,主要特點有:

? ? 1. 部署方面,Server端代碼運行于我一個云服務器端,我在本地只要啟動Client端的服務即可連接上服務;

? ? 2. 用戶操作方面,用戶可以進行的操作有:登錄、注冊、選擇聊天室、聊天、獲取該聊天室以往所有內容;

? ? 3. 數據通信方面,所有通信都是基于MQTT的發布-訂閱機制。單個Client和Server通信時,登錄、注冊和獲取聊天室所有內容Server以特定的topic進行發布,比如說登錄就用“login”,Server端根據主題不同處理不同客戶端的操作,以各自客戶端的唯一標識為主題發布消息,確保準確的客戶端收到信息;,而Server發布某一個聊天室某一條最新消息時,使用的topic是聊天室的名字;用戶登錄成功后會獲得Server端發布的一個token,接下來請求信息時使用token通信;

? ? 4. 也因為采用了token,對用戶進行嚴格的區分,同一賬號在同一時間只能在一個Client端登錄,即本地若開了兩個Client登錄同個賬號,也會只有晚登錄的Client有效。

? ? 5. 代碼較多,已上傳到github,鏈接為Trident-Chat,具體部署細節發布在上面

?

2、實驗平臺、工具框架

使用pycharm開發,語言為python,數據庫使用mysql和redis,代理服務器使用mosquitto,遵循MVC模式,具體框架有:

? ? 1. 數據庫操作,使用基于pymysql的ORM:peewee;

? ? 2. 界面開發,使用tkinter和easygui;

? ? 3. 通信遵循MQTT協議,代碼中使用paho-mqtt搭建客戶端

?

3、實驗設計

UML活動圖如下:

?

數據流圖如下:

?

4、實驗步驟

? ? 1. Server類和Client類均有的線程鎖的設計,該設計是為了保證同一時間一個Client或者Server對象只能有一個維持MQTT監聽的線程,以防止多個線程同時調用函數造成死鎖以及數據冗余。

? ? 2. Server類和Client類均有個字段和執行函數的映射,該設計增強了代碼的可讀性,便于管理,具體實現是根據字段不同選擇不同的操作函數,該字段是從接收的信息而來。

? ? 3. Client類的operate函數接收一個命令,根據命令執行函數,并設置線程控制的變量。

? ? 4. 接上文,舉個例子,當用戶登錄時,便會執行Client對象的函數,,發送用戶名、密碼到Server端,并監聽Server端發送的關于這個用戶的登錄消息,收到,即提示主線程進行信息展示或頁面跳轉的操作,這個提示功能由threading.Event對象的set函數來執行。界面類的對象在監聽服務端對于登錄操作的返回信息時,是另開子線程進行訂閱,不阻塞主線程,增強用戶體驗

? ? 首先是界面類對象判斷輸入框內輸入是否正確,之后另開線程調用Client對象operate函數

?

? ? Client對象的operate函數選擇了send_login_msg函數發送數據

?

? ? Client對象一直處于訂閱狀態,收到關于登錄的返回信息便執行一系列操作,set函數通知主線程

?

5、運行截圖

? ? 1. 初始界面

? ? 2. 注冊、登錄(若是失敗會有提示信息)

?

?

? ? 3. 進入聊天室,選擇一個聊天室,就會更新以往的內容

? ? 4. 多個用戶進行聊天,不同聊天室不互通

? ? 5. 用戶可以注銷退出,注銷則回到登錄界面

?

?

?

總結

以上是生活随笔為你收集整理的基于MQTT的python聊天室的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。