python创建websocket服务器,实现循环发送消息

news2024/12/23 20:34:46

WebSocket协议是在2008年由Web应用程序设计师和开发人员创建的,目的是为了在Web浏览器和服务器之间提供更高效、更低延迟的双向通信。它允许客户端和服务器在任何时候发送消息,无需重新建立TCP连接。WebSocket可以在Web浏览器和服务器之间传输文本和二进制数据,使得构建实时Web应用程序变得更加简单。

在Python中使用WebSocket

Python中有多个库可以帮助我们使用WebSocket,如:websockets、aiohttp等。在本文中,我们将使用websockets库来演示WebSocket编程。要安装websockets库,你可以使用pip:

pip install websockets

创建WebSocket服务器

使用websockets库,我们可以轻松地创建一个WebSocket服务器。以下是一个简单的示例:

import asyncio
import websockets

async def echo(websocket, path):
    async for message in websocket:
        print(f"Received message: {message}")
        await websocket.send(f"Echo: {message}")

start_server = websockets.serve(echo, "localhost", 8765)

asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

在这个示例中,我们定义了一个名为echo的协程函数,它接收两个参数:websocket和path。该函数使用async for循环读取客户端发送的消息,并将消息发送回客户端。

然后,我们使用websockets.serve()函数创建一个WebSocket服务器,监听本地主机的8765端口。最后,我们使用asyncio的事件循环启动服务器。

连接上服务器直接推消息

我这里有一个需求,当一个客户端连接上服务器后,立马向客户端源源不断的发送消息,就可以这样改造:

import asyncio
import time
import websockets


async def echo(websocket, path):
    print(f"websocket echo: {path} , {websocket}")
    # await websocket.send(f"Echo: 11111")
    message = 1
    while True:
        await websocket.send(f"Echo: {message}")
        print(f"Echo: {message}")
        message += 1
        time.sleep(1)


start_server = websockets.serve(echo, "localhost", 8765)
print(f"websocket listen:ws://localhost:8765")
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()

使用Postman测试

可以先使用postman创建一个websocket连接测试一下:

 

创建WebSocket客户端

要创建一个WebSocket客户端,我们同样可以使用websockets库。以下是一个简单的客户端示例:

import asyncio
import websockets

async def main():
    async with websockets.connect("ws://localhost:8765") as websocket:
        message = "Hello, server!"
        await websocket.send(message)
        print(f"Sent: {message}")

        response = await websocket.recv()
        print(f"Received: {response}")

asyncio.run(main())

在这个示例中,我们使用websockets.connect()函数建立与WebSocket服务器的连接。然后,我们使用send()方法向服务器发送消息,并使用recv()方法接收服务器的响应。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1857460.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux命令----wc,uniq,sort的用法

1.wc的用法:wc 命令用于计算文件中的行数、单词数和字节数。 常用选项 -l:只显示行数-w:只显示单词数-c:只显示字节数-m:只显示字符数(与 -c 类似,但处理多字节字符)-L&#xff1a…

吴恩达机器学习 第三课 week1 无监督学习算法(下)

目录 01 学习目标 02 异常检测算法 2.1 异常检测算法的概念 2.2 基于高斯模型的异常检测 03 利用异常检测算法检测网络服务器的故障 3.1 问题描述 3.2 算法实现 3.3 问题升级 04 总结 01 学习目标 (1)理解异常检测算法(Anomaly Det…

线程也不是越多越好,多少是好?

前面我们评估了不同大小基因组构建索引所需的计算资源和时间资源和不同大小数据集比对所需的计算资源和时间资源。 下面我们进一步看下不同线程数的影响。 测试电脑配置 这是一个10核、20线程的处理器,主频2.8 G HZ,可超频到5.2 GhZ。 在Windows系统…

windows系统上nginx搭建文件共享

1、下载windows版nginx 下载地址 2、配置nginx 编辑nginx.conf配置文件 在http模块下添加这个参数 underscores_in_headers on;#修改location内容,共享哪个文件夹,就写哪个文件夹,最后一定要跟上/,否则无法访问 location / {…

Java内存模型中的“可见性”、“原子性”、“有序性”,它们如何影响多线程程序的行为?

在Java内存模型(Java Memory Model, JMM)中,“可见性”、“原子性”和“有序性”是确保多线程程序正确执行的三个核心概念。它们直接影响到多线程环境下数据的一致性和程序的行为。 可见性(Visibility) 概念&#xf…

Android 大话binder通信 (下)

戳蓝字“牛晓伟”关注我哦! 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章 前情提要 Android 大话binder通信 (上)主要介绍了矮挫丑进程一直暗恋白富美进程,遂发送情书给她,以表达对她的爱慕之情,而情书顺利的到达…

NFTScan | 06.17~06.23 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期:2024.06.17~ 2024.06.23 NFT Hot News 01/ Slerf 将向其 NFT 持有者空投,快照将在几小时内拍摄 6 月 17 日,Slerf 宣布将为其 NFT 持有者准备空投,快…

[C++]24:异常和智能指针

异常和智能指针 一.异常1.C/C的错误:1.C2.C3.三个关键字: 2.使用异常:1.基本概念:2.基本代码:1.基本使用:2.多个捕获:3.任意类型异常的捕获:4.异常的重新抛出: 3.异常安全…

RK3568技术笔记十八 Linux GPIO驱动程序中设备树分析

这段代码是RK3568芯片的设备树(Device Tree)片段,用于描述GPIO控制器的配置。 pinctrl: pinctrl { compatible "rockchip,rk3568-pinctrl"; // 兼容性字符串,指定此设备树节点适用于RK3568的引脚控制器 rockchip,grf…

汽车信息安全--HSM和TEE的区别

目录 HSM TEE TEE 和 HSM 技术特点与主要应用场景 TEE 和 HSM 相结合的方案 TEE 和 HSM 在车端的分布 HSM HSM指Hardware Security Module,它是一种有自己独立的CPU、密码算法硬件加速器、独立Flash等,用于生成、存储和管理加密密钥,以…

2024年商业管理与金融创新国际会议(BMFI 2024)

2024年商业管理与金融创新国际会议(BMFI 2024) 2024 International Conference on Business Management and Financial Innovation 【重要信息】 大会地点:上海 大会官网:http://www.icbmfi.com 投稿邮箱:icbmfisub-co…

高并发cn.hutool.http.HttpRequest请求优化

高并发cn.hutool.http.HttpRequest请求优化 文章目录 高并发cn.hutool.http.HttpRequest请求优化优化方向Async线程池管理Http请求处理流程Tomcat接收到请求后的处理流程Tomcat的线程分配和管理方案一方案二方案三如何启用Spring Boot Actuator 优化方向 Async线程池管理 使用…

用户态协议栈06-TCP三次握手

最近由于准备软件工程师职称考试,然后考完之后不小心生病了,都没写过DPDK的博客了。今天开始在上次架构优化的基础上增加TCP的协议栈流程。 什么是TCP 百度百科:TCP即传输控制协议(Transmission Control Protocol)是…

24 常用到的截图工具

1 语录 从此世界在我面前, 指向着我想去的任何地方, 我完全而绝对的主持着我 定义: 截图是将计算机屏幕上的当前显示内容保存为图片文件的行为。 概念: 全屏截图:捕捉整个屏幕的截图。区域截图:选择屏幕上…

【第十四课】区域经济可视化——标注

一、前言 地图上说明图面要素的名称、质量与数量特征的文字或数字,统称为地图 注记。只有图形符号而没有注记符号的地图,只能是一种令人费解的 “盲图”。 地图上的注记分为名称注记、说明注记和数字注记三种。名称注记用于说明各 种事物的专有名称&…

怎么使用RSI指标分析现货黄金行情走势?

拿到一波现货黄金行情走势,如何着手对其进行分析呢?投资者只要在网络上搜索一下,保管能够找到各种各样的答案,而本文要讨论的就是其中一种,我们借助RSI指标进行分析。 RSI就是相对强弱指标的简称,这是市场中…

车间现场管理那些事

在制造企业中,车间现场管理是至关重要的一环。车间现场管理包括了对生产设备、生产过程、产品质量以及员工行为的管理。有效的车间现场管理能够提高生产效率,降低成本,提高产品质量,并且能够保障员工的安全。那么,车间…

License简介和Licensecc的使用

License简介和Licensecc的使用 License简介什么是LIcense简易License制作加密扫盲对称加密非对称加密 Licensecc使用构建和编译在linux上进行编译UbuntuCentOS 7CentOS 8下载并编译配置编译和测试cmake 后可以跟的参数在Linux上为Windows进行交叉编译 在windos上进行编译MSVC (…

Linux 运维王者从不离手的10款工具

运维工程师在日常工作中频繁运用的10款工具,并细致阐述每款工具的功能、适用场景以及其卓越之处。 1. Shell脚本 功能:主要用于自动化任务和批处理作业。 适用场景:频繁用于文件处理、系统管理、简单的网络管理等操作。 优势:灵…

原装GUVCL-T10GD韩国GENICOM光电二极管紫外线传感器原厂代理商

深圳市宏南科技有限公司是韩国GenUV公司的原厂代理商,所售紫外线传感器均来自于原始生产厂商直接供货,非第三方转售。 GUVCL-T10GD 韩国GENICOM光电二极管光传感器 / 低亮度 / 紫外线 UV-C传感器 GUVCL-T10GD 采用基于氮化铟的材料 肖特基型 光电二极管…