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中操作文件之write()方法的使用教程
May 25 Python
分析用Python脚本关闭文件操作的机制
Jun 28 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
Aug 16 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
Dec 12 Python
使用Python对Excel进行读写操作
Mar 30 Python
Python3 jupyter notebook 服务器搭建过程
Nov 30 Python
python3.4+pycharm 环境安装及使用方法
Jun 13 Python
Python编程中类与类的关系详解
Aug 08 Python
PyCharm汉化安装及永久激活详细教程(靠谱)
Jan 16 Python
Python错误的处理方法
Jun 23 Python
python产生模拟数据faker库的使用详解
Nov 04 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 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中调用其他系统http接口的方法说明
2014/02/28 PHP
PHP简单读取PDF页数的实现方法
2016/07/21 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
ie 处理 gif动画 的onload 事件的一个 bug
2007/04/12 Javascript
jquery插件制作教程 txtHover
2012/08/17 Javascript
javascript数组快速打乱重排的方法
2014/01/02 Javascript
javascript中的括号()用法小结
2014/04/14 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
js对象继承之原型链继承实例
2015/01/10 Javascript
JS简单测试循环运行时间的方法
2016/09/04 Javascript
AngularJS入门教程之表单校验用法示例
2016/11/02 Javascript
Javascript实现倒计时(防页面刷新)实例
2016/12/13 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
js实现网页定位导航功能
2017/03/07 Javascript
详解jQuery中关于Ajax的几个常用的函数
2017/07/17 jQuery
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
深入剖析Node.js cluster模块
2018/05/23 Javascript
JavaScript实现多态和继承的封装操作示例
2018/08/20 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
2020/04/30 Javascript
Vue封装全局过滤器Filters的步骤
2020/09/16 Javascript
详解基于element的区间选择组件校验(交易金额)
2021/01/07 Javascript
python中pygame模块用法实例
2014/10/09 Python
Python操作Excel之xlsx文件
2017/03/24 Python
Python时间序列缺失值的处理方法(日期缺失填充)
2019/08/11 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
基于Python实现拆分和合并GIF动态图
2019/10/22 Python
TensorFlow——Checkpoint为模型添加检查点的实例
2020/01/21 Python
python小白学习包管理器pip安装
2020/06/09 Python
详解pytorch tensor和ndarray转换相关总结
2020/09/03 Python
英国最大的体育&时尚零售公司:JD Sports
2017/12/13 全球购物
俄罗斯最大的灯具网站:Fandeco
2020/03/14 全球购物
高中生学习总结的自我评价范文
2013/10/13 职场文书
入党积极分子思想汇报范文
2014/01/05 职场文书
财务工作犯错检讨书
2014/10/07 职场文书
新手必备Python开发环境搭建教程
2021/05/28 Python