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实现查找excel里某一列重复数据并且剔除后打印的方法
May 26 Python
Python实现的桶排序算法示例
Nov 29 Python
python实现微信小程序自动回复
Sep 10 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
pandas分区间,算频率的实例
Jul 04 Python
Python 3 实现定义跨模块的全局变量和使用教程
Jul 07 Python
python GUI库图形界面开发之PyQt5布局控件QVBoxLayout详细使用方法与实例
Mar 06 Python
python简单实现最大似然估计&amp;scipy库的使用详解
Apr 15 Python
python如何导入依赖包
Jul 13 Python
解决Python paramiko 模块远程执行ssh 命令 nohup 不生效的问题
Jul 14 Python
GitHub上值得推荐的8个python 项目
Oct 30 Python
python微信智能AI机器人实现多种支付方式
Apr 12 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+MYSQL的文章管理系统(一)
2006/10/09 PHP
PHPMailer邮件类利用smtp.163.com发送邮件方法
2008/09/11 PHP
PHP 函数语法介绍一
2009/06/14 PHP
PHP使用ActiveMQ实例
2018/02/05 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
Laravel登录失败次数限制的实现方法
2020/08/26 PHP
De facto standard 世界上不可思议的事实标准
2010/08/29 Javascript
JS实现兼容各种浏览器的获取选择文本的方法【测试可用】
2016/06/21 Javascript
JS给Array添加是否包含字符串的简单方法
2016/10/29 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
2017/05/25 jQuery
深入理解Angular中的依赖注入
2017/06/26 Javascript
详解vue 实例方法和数据
2017/10/23 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
微信小程序实现搜索功能
2020/03/10 Javascript
Nuxt默认模板、默认布局和自定义错误页面的实现
2020/05/11 Javascript
vue 基于abstract 路由模式 实现页面内嵌的示例代码
2020/12/14 Vue.js
Python 用三行代码提取PDF表格数据
2019/10/13 Python
python使用HTMLTestRunner导出饼图分析报告的方法
2019/12/30 Python
pytorch的batch normalize使用详解
2020/01/15 Python
python“静态”变量、实例变量与本地变量的声明示例
2020/11/13 Python
Perricone MD裴礼康美国官网:抗衰老护肤品
2016/09/26 全球购物
美国糖果店:Sugarfina
2019/02/21 全球购物
俄罗斯最大的香水和化妆品网上商店:Randewoo
2020/11/05 全球购物
低碳生活倡议书
2014/04/14 职场文书
难忘的一天教学反思
2014/04/30 职场文书
警示教育活动总结
2014/05/05 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
财务负责人岗位职责
2015/02/03 职场文书
大学生志愿者心得体会
2016/01/15 职场文书
如何制定销售人员薪酬制度?
2019/07/09 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
postgres之jsonb属性的使用操作
2021/06/23 PostgreSQL
java调用Restful接口的三种方法
2021/08/23 Java/Android