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实现简单温度转换的方法
Mar 13 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
Mar 30 Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 Python
python+mysql实现学生信息查询系统
Feb 21 Python
Django生成PDF文档显示在网页上以及解决PDF中文显示乱码的问题
Jul 04 Python
如何使用python操作vmware
Jul 27 Python
scrapy爬虫:scrapy.FormRequest中formdata参数详解
Apr 30 Python
python文件读取失败怎么处理
Jun 23 Python
python中函数返回多个结果的实例方法
Dec 16 Python
Python 中如何使用 virtualenv 管理虚拟环境
Jan 21 Python
Python中正则表达式对单个字符,多个字符和匹配边界等使用
Jan 27 Python
Python数据清洗工具之Numpy的基本操作
Apr 22 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
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
Yii2.0使用阿里云OSS的SDK上传图片、下载、删除图片示例
2017/09/20 PHP
PHP的PDO连接讲解
2019/01/24 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
JavaScript类库D
2010/10/24 Javascript
setTimeout函数兼容各主流浏览器运行执行效果实例
2013/06/13 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
深入理解JavaScript系列(27):设计模式之建造者模式详解
2015/03/03 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
JS 在数组指定位置插入/删除数据的方法
2017/01/12 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
vue环境搭建简单教程
2017/11/07 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
2018/01/09 Javascript
nodejs实现连接mongodb数据库的方法示例
2018/03/15 NodeJs
vue使用keep-alive保持滚动条位置的实现方法
2019/04/09 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
[00:48]DOTA2国际邀请赛公开赛报名开始 扫码开启逐梦之旅
2018/06/06 DOTA
python有证书的加密解密实现方法
2014/11/19 Python
Python实现在线暴力破解邮箱账号密码功能示例【测试可用】
2017/09/06 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
2018/01/23 Python
python验证码识别教程之利用投影法、连通域法分割图片
2018/06/04 Python
Python continue继续循环用法总结
2018/06/10 Python
Django中间件拦截未登录url实例详解
2019/09/03 Python
K最近邻算法(KNN)---sklearn+python实现方式
2020/02/24 Python
python随机模块random的22种函数(小结)
2020/05/15 Python
浅谈CSS3鼠标移入图片动态提示效果(transform)
2017/11/06 HTML / CSS
英国鲜花递送:Blossoming Gifts
2020/07/10 全球购物
新任教师自我鉴定
2014/02/24 职场文书
旅游活动总结
2014/08/27 职场文书
2014年结对帮扶工作总结
2014/12/17 职场文书
先进集体事迹材料范文
2014/12/25 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
Python离线安装openpyxl模块的步骤
2021/03/30 Python
Java移除无效括号的方法实现
2021/08/07 Java/Android