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正则表达式匹配HTML页面编码
Apr 08 Python
Python连接SQLServer2000的方法详解
Apr 19 Python
python引入导入自定义模块和外部文件的实例
Jul 24 Python
python编写暴力破解zip文档程序的实例讲解
Apr 24 Python
python如何获取列表中每个元素的下标位置
Jul 01 Python
Python 类的魔法属性用法实例分析
Nov 21 Python
python实现二分类的卡方分箱示例
Nov 22 Python
Django通用类视图实现忘记密码重置密码功能示例
Dec 17 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
python多进程 主进程和子进程间共享和不共享全局变量实例
Apr 25 Python
python Django 反向访问器的外键冲突解决
May 20 Python
Python字符串常规操作小结
Apr 03 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 批量删除 sql语句
2009/06/05 PHP
使用php计算排列组合的方法
2013/11/13 PHP
推荐一款MAC OS X 下php集成开发环境mamp
2014/11/08 PHP
php去掉文件前几行的方法
2015/07/29 PHP
JS中setTimeout()的用法详解
2013/04/14 Javascript
fullpage.js全屏滚动插件使用实例
2016/09/06 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
微信小程序picker组件简单用法示例【附demo源码下载】
2017/12/05 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
Node.js HTTP服务器中的文件、图片上传的方法
2019/09/23 Javascript
python通过smpt发送邮件的方法
2015/04/30 Python
python保存网页图片到本地的方法
2018/07/24 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
Django CBV类的用法详解
2019/07/26 Python
在pycharm中实现删除bookmark
2020/02/14 Python
Python中求对数方法总结
2020/03/10 Python
python对接ihuyi实现短信验证码发送
2020/05/10 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
keras实现VGG16方式(预测一张图片)
2020/07/07 Python
PyQt5的QWebEngineView使用示例
2020/10/20 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
美国一家专业的太阳镜网上零售商:Solstice太阳镜
2016/07/25 全球购物
美国顶级防滑鞋:Shoes For Crews
2017/03/27 全球购物
J2EE模式面试题
2016/10/11 面试题
初婚初育证明
2014/01/14 职场文书
汽车专业学生自我评价
2014/01/19 职场文书
绿化先进工作者事迹材料
2014/01/30 职场文书
《在山的那边》教学反思
2014/02/23 职场文书
公立医院改革实施方案
2014/03/14 职场文书
领导班子三严三实对照检查材料
2014/09/25 职场文书
房屋财产继承协议书范本
2014/11/03 职场文书
本溪水洞导游词
2015/02/11 职场文书
校友会致辞
2015/07/30 职场文书