python开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS)

2020-09-24 0 540

最近又回顾了下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开发实例之python使用Websocket库开发简单聊天工具实例详解(python+Websocket+JS) http://www.ox520.com/24998.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务