python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)

 更新时间:2020年03月18日 15:16:56   作者:沙振宇  
这篇文章主要介绍了python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS),需要的朋友可以参考下

最近又回顾了下Websocket,发现已经忘的七七八八了。于是用js写了客户端,用python写了服务端,来复习一下这方面的知识。

先看一下python简单聊天工具最终效果

一个客户端连上服务的并发送消息

另一个客户端连上服务的并发送消息

服务的收到客户端的全部消息并返回消息

一个客户端掉线并不影响其它socket连接

列取全部连接客户端对象和当前发消息的客户端对象

先安装websockets

pip install websockets

python简单聊天工具实例源码

Python聊天工具服务端

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

websocket_users = set()


# 检测客户端权限,用户名密码通过才能退出循环
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)


# 接收客户端消息并处理,这里只是简单把客户端发来的返回回去
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)


# 服务器端主逻辑
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...")  # 无效状态
      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();">发送</button>
</body>
</html>

本文主要介绍了python使用Websocket库开发简单聊天工具实例详细,更多关于python Websocket库开发知识请查看下面的相关链接

相关文章

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

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

    本文详细介绍了Playwright的常用操作方法,包括获取页面元素、点击按钮和链接等。这些方法可以帮助开发者更加高效地进行自动化测试和爬虫开发,需要的可以参考一下
    2023-05-05
  • Django自定义manage命令实例代码

    Django自定义manage命令实例代码

    这篇文章主要介绍了Django自定义manage命令实例代码,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • PyQt5中向单元格添加控件的方法示例

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

    这篇文章主要介绍了PyQt5中向单元格添加控件的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • python使用正则表达式(Regular Expression)方法超详细

    python使用正则表达式(Regular Expression)方法超详细

    这篇文章主要介绍了python使用正则表达式(Regular Expression)方法超详细,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • PyQt4实时显示文本内容GUI的示例

    PyQt4实时显示文本内容GUI的示例

    今天小编就为大家分享一篇PyQt4实时显示文本内容GUI的示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06
  • Python-typing: 类型标注与支持 Any类型详解

    Python-typing: 类型标注与支持 Any类型详解

    这篇文章主要介绍了Python-typing: 类型标注与支持 Any类型详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-05-05
  • python对html代码进行escape编码的方法

    python对html代码进行escape编码的方法

    这篇文章主要介绍了python对html代码进行escape编码的方法,涉及Python中escape方法的使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-05-05
  • python高效的素数判断算法

    python高效的素数判断算法

    这篇文章主要介绍了python高效的素数判断算法,研究算法的同学一定要看一下
    2021-04-04
  • python中模块导入模式详解

    python中模块导入模式详解

    这篇文章主要为大家介绍了python中模块导入的模式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • python绘制柱状图的方法

    python绘制柱状图的方法

    这篇文章主要为大家详细介绍了python绘制柱状图的方法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08

最新评论