最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python開發(fā)實(shí)例之python使用Websocket庫開發(fā)簡單聊天工具實(shí)例詳解(python+Websocket+JS)

 更新時間:2020年03月18日 15:16:56   作者:沙振宇  
這篇文章主要介紹了python開發(fā)實(shí)例之python使用Websocket庫開發(fā)簡單聊天工具實(shí)例詳解(python+Websocket+JS),需要的朋友可以參考下

最近又回顧了下Websocket,發(fā)現(xiàn)已經(jīng)忘的七七八八了。于是用js寫了客戶端,用python寫了服務(wù)端,來復(fù)習(xí)一下這方面的知識。

先看一下python簡單聊天工具最終效果

一個客戶端連上服務(wù)的并發(fā)送消息

另一個客戶端連上服務(wù)的并發(fā)送消息

服務(wù)的收到客戶端的全部消息并返回消息

一個客戶端掉線并不影響其它socket連接

列取全部連接客戶端對象和當(dāng)前發(fā)消息的客戶端對象

先安裝websockets

pip install websockets

python簡單聊天工具實(shí)例源碼

Python聊天工具服務(wù)端

#! -*- coding: utf-8 -*-
"""
Info: Websocket 的使用示例
"""
import asyncio
import websockets

websocket_users = set()


# 檢測客戶端權(quán)限,用戶名密碼通過才能退出循環(huán)
async def check_user_permit(websocket):
  print("new websocket_users:", websocket)
  websocket_users.add(websocket)
  print("websocket_users list:", websocket_users)
  while True:
    recv_str = await websocket.recv()
    cred_dict = recv_str.split(":")
    if cred_dict[0] == "admin" and cred_dict[1] == "123456":
      response_str = "Congratulation, you have connect with server..."
      await websocket.send(response_str)
      print("Password is ok...")
      return True
    else:
      response_str = "Sorry, please input the username or password..."
      print("Password is wrong...")
      await websocket.send(response_str)


# 接收客戶端消息并處理,這里只是簡單把客戶端發(fā)來的返回回去
async def recv_user_msg(websocket):
  while True:
    recv_text = await websocket.recv()
    print("recv_text:", websocket.pong, recv_text)
    response_text = f"Server return: {recv_text}"
    print("response_text:", response_text)
    await websocket.send(response_text)


# 服務(wù)器端主邏輯
async def run(websocket, path):
  while True:
    try:
      await check_user_permit(websocket)
      await recv_user_msg(websocket)
    except websockets.ConnectionClosed:
      print("ConnectionClosed...", path)  # 鏈接斷開
      print("websocket_users old:", websocket_users)
      websocket_users.remove(websocket)
      print("websocket_users new:", websocket_users)
      break
    except websockets.InvalidState:
      print("InvalidState...")  # 無效狀態(tài)
      break
    except Exception as e:
      print("Exception:", e)


if __name__ == '__main__':
  print("127.0.0.1:8181 websocket...")
  asyncio.get_event_loop().run_until_complete(websockets.serve(run, "127.0.0.1", 8181))
  asyncio.get_event_loop().run_forever()

python簡單聊天工具客戶端代碼Html+Js

<!-- Websocket 的使用示例 -->
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>測試Socket——ws://127.0.0.1:8181</title>
  <script>
    var socket;
    if ("WebSocket" in window) {
      var ws = new WebSocket("ws://127.0.0.1:8181/test");
      socket = ws;
      ws.onopen = function() {
        console.log('連接成功');
        alert("連接成功, 請輸入賬號和密碼");
      };
      ws.onmessage = function(evt) {
        var received_msg = evt.data;
        document.getElementById("showMes").value+=received_msg+"\n";
      };
      ws.onclose = function() {
        alert("斷開了連接");
      };
    } else {
      alert("瀏覽器不支持WebSocket");
    }
    function sendMeg(){
      var message=document.getElementById("name").value+":"+document.getElementById("mes").value;
      document.getElementById("showMes").value+=message+"\n\n";
      socket.send(message);
    }
  </script>
</head>
<body>
  <textarea rows="3" cols="30" id="showMes" style="width:300px;height:500px;"></textarea>
  <br/>
  <label>名稱</label>
  <input type="text" id="name"/>
  <br/>
  <label>消息</label>
  <input type="text" id="mes"/>
  <button onclick="sendMeg();">發(fā)送</button>
</body>
</html>

本文主要介紹了python使用Websocket庫開發(fā)簡單聊天工具實(shí)例詳細(xì),更多關(guān)于python Websocket庫開發(fā)知識請查看下面的相關(guān)鏈接

相關(guān)文章

  • Python中Playwright的常用操作方法分享

    Python中Playwright的常用操作方法分享

    本文詳細(xì)介紹了Playwright的常用操作方法,包括獲取頁面元素、點(diǎn)擊按鈕和鏈接等。這些方法可以幫助開發(fā)者更加高效地進(jìn)行自動化測試和爬蟲開發(fā),需要的可以參考一下
    2023-05-05
  • Django自定義manage命令實(shí)例代碼

    Django自定義manage命令實(shí)例代碼

    這篇文章主要介紹了Django自定義manage命令實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • PyQt5中向單元格添加控件的方法示例

    PyQt5中向單元格添加控件的方法示例

    這篇文章主要介紹了PyQt5中向單元格添加控件的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • python使用正則表達(dá)式(Regular Expression)方法超詳細(xì)

    python使用正則表達(dá)式(Regular Expression)方法超詳細(xì)

    這篇文章主要介紹了python使用正則表達(dá)式(Regular Expression)方法超詳細(xì),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • PyQt4實(shí)時顯示文本內(nèi)容GUI的示例

    PyQt4實(shí)時顯示文本內(nèi)容GUI的示例

    今天小編就為大家分享一篇PyQt4實(shí)時顯示文本內(nèi)容GUI的示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Python-typing: 類型標(biāo)注與支持 Any類型詳解

    Python-typing: 類型標(biāo)注與支持 Any類型詳解

    這篇文章主要介紹了Python-typing: 類型標(biāo)注與支持 Any類型詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • python對html代碼進(jìn)行escape編碼的方法

    python對html代碼進(jìn)行escape編碼的方法

    這篇文章主要介紹了python對html代碼進(jìn)行escape編碼的方法,涉及Python中escape方法的使用技巧,非常具有實(shí)用價值,需要的朋友可以參考下
    2015-05-05
  • python高效的素數(shù)判斷算法

    python高效的素數(shù)判斷算法

    這篇文章主要介紹了python高效的素數(shù)判斷算法,研究算法的同學(xué)一定要看一下
    2021-04-04
  • python中模塊導(dǎo)入模式詳解

    python中模塊導(dǎo)入模式詳解

    這篇文章主要為大家介紹了python中模塊導(dǎo)入的模式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • python繪制柱狀圖的方法

    python繪制柱狀圖的方法

    這篇文章主要為大家詳細(xì)介紹了python繪制柱狀圖的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08

最新評論

思南县| 沛县| 屯留县| 株洲市| 盈江县| 黄骅市| 连城县| 平武县| 柳河县| 石渠县| 塘沽区| 泾源县| 拜城县| 海门市| 永丰县| 山阴县| 盐山县| 永仁县| 广东省| 长宁区| 和政县| 峨眉山市| 通州市| 南雄市| 庆元县| 林甸县| 新乐市| 凤台县| 夏邑县| 日喀则市| 安多县| 新宾| 湛江市| 五指山市| 漳平市| 河间市| 云浮市| 西乌珠穆沁旗| 天长市| 中山市| 绥芬河市|