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中使用urllib2防止302跳转的代码例子
Jul 07 Python
python的mysqldb安装步骤详解
Aug 14 Python
Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】
Sep 28 Python
python3使用smtplib实现发送邮件功能
May 22 Python
kafka-python批量发送数据的实例
Dec 27 Python
Python中判断子串存在的性能比较及分析总结
Jun 23 Python
详解python编译器和解释器的区别
Jun 24 Python
基于 Django 的手机管理系统实现过程详解
Aug 16 Python
python使用多线程编写tcp客户端程序
Sep 02 Python
python实现while循环打印星星的四种形状
Nov 23 Python
Python列表切片常用操作实例解析
Dec 16 Python
Python中使用threading.Event协调线程的运行详解
May 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数组函数序列之array_keys() - 获取数组键名
2011/10/30 PHP
Laravel推荐使用的十个辅助函数
2019/05/10 PHP
javaScript实现滚动新闻的方法
2015/07/30 Javascript
谈谈基于iframe、FormData、FileReader三种无刷新上传文件的方法
2015/12/03 Javascript
jquery遍历函数siblings()用法实例
2015/12/24 Javascript
jQuery使用cookie与json简单实现购物车功能
2016/04/15 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
Vue实现路由跳转和嵌套
2017/06/20 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
vuex 使用文档小结篇
2018/01/11 Javascript
react-router4 配合webpack require.ensure 实现异步加载的示例
2018/01/18 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
Javascript 之封装(Package)
2018/09/14 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
python实现逆波兰计算表达式实例详解
2015/05/06 Python
Python获取指定字符前面的所有字符方法
2018/05/02 Python
利用Python检测URL状态
2019/07/31 Python
对python中assert、isinstance的用法详解
2019/11/27 Python
python对Excel的读取的示例代码
2020/02/14 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
StubHub智利:购买和出售您的门票
2016/11/23 全球购物
法国珠宝店:CLEOR
2017/01/29 全球购物
英国品牌男装折扣网站:Brown Bag
2018/03/08 全球购物
香奈儿美国官网:CHANEL美国
2020/05/20 全球购物
端午节粽子促销活动方案
2014/02/02 职场文书
《我不是最弱小的》教学反思
2014/02/23 职场文书
公司承诺书范文
2014/05/19 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
公司地址变更通知
2015/04/25 职场文书
计算机教师工作总结
2015/08/13 职场文书
2016国庆节67周年寄语
2015/12/07 职场文书
企业内部管理控制:采购授权审批制度范本
2020/01/19 职场文书
Java实战之课程信息管理系统的实现
2022/04/01 Java/Android
Python时间操作之pytz模块使用详解
2022/06/14 Python