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


Posted in Python onMarch 18, 2020

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

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

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

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

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

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

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

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

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

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

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

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

先安装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 相关文章推荐
Python 匹配任意字符(包括换行符)的正则表达式写法
Oct 29 Python
windows系统中python使用rar命令压缩多个文件夹示例
May 06 Python
python操作xml文件详细介绍
Jun 09 Python
Python中实现字符串类型与字典类型相互转换的方法
Aug 18 Python
R vs. Python 数据分析中谁与争锋?
Oct 18 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
Jan 29 Python
python下PyGame的下载与安装过程及遇到问题
Aug 04 Python
Pycharm中Python环境配置常见问题解析
Jan 16 Python
在Windows上安装和配置 Jupyter Lab 作为桌面级应用程序教程
Apr 22 Python
aws 通过boto3 python脚本打pach的实现方法
May 10 Python
keras 简单 lstm实例(基于one-hot编码)
Jul 02 Python
python爬取网页版QQ空间,生成各类图表
Jun 02 Python
python selenium操作cookie的实现
Mar 18 #Python
Selenium 滚动页面至元素可见的方法
Mar 18 #Python
python字符串判断密码强弱
Mar 18 #Python
详解Python3中的 input() 函数
Mar 18 #Python
Python通过socketserver处理多个链接
Mar 18 #Python
python实现密码强度校验
Mar 18 #Python
Python tcp传输代码实例解析
Mar 18 #Python
You might like
PHP的魔术常量__METHOD__简介
2014/07/08 PHP
JavaScript null和undefined区别分析
2009/10/14 Javascript
JavaScript实现梯形乘法表的方法
2015/04/25 Javascript
基于jQuery1.9版本如何判断浏览器版本类型
2016/01/12 Javascript
原生JS实现图片翻书效果
2017/02/16 Javascript
在javaScript中检测数据类型的几种方式小结
2017/03/04 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
详解Angular 4.x 动态创建组件
2017/04/25 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
详解ES6 Promise的生命周期和创建
2019/08/18 Javascript
JavaScript中的null和undefined用法解析
2019/09/30 Javascript
JS合并两个数组的3种方法详解
2019/10/24 Javascript
axios 实现post请求时把对象obj数据转为formdata
2019/10/31 Javascript
基于VSCode调试网页JavaScript代码过程详解
2020/07/20 Javascript
JS中多层次排序算法的实现代码
2021/01/06 Javascript
python实现人人网登录示例分享
2014/01/19 Python
python批量读取txt文件为DataFrame的方法
2018/04/03 Python
Python分割指定页数的pdf文件方法
2018/10/26 Python
python爬取王者荣耀全皮肤的简单实现代码
2020/01/31 Python
python如何求100以内的素数
2020/05/27 Python
详解Python中的路径问题
2020/09/02 Python
pycharm 的Structure界面设置操作
2021/02/05 Python
python线程优先级队列知识点总结
2021/02/28 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
html5的canvas实现3d雪花飘舞效果
2013/12/27 HTML / CSS
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
Interflora澳大利亚:同日鲜花速递
2019/06/25 全球购物
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
北美最大的参茸药食商城:德成行
2020/12/06 全球购物
给交警的表扬信
2014/01/12 职场文书
师范毕业生自我鉴定
2014/01/15 职场文书
买房协议书
2014/04/11 职场文书
具结保证书
2015/01/17 职场文书
个人工作保证书
2015/02/28 职场文书
幼师个人总结范文
2015/02/28 职场文书
初中英语教师个人工作总结2015
2015/07/21 职场文书