首页 > 编程语言 >python通过Websocket与html主动通讯

python通过Websocket与html主动通讯

时间:2023-07-16 12:11:36浏览次数:41  
标签:WebSocket python 实时 server Python html Websocket dt 连接

python通过Websocket与html主动通讯

导语:在Web开发中,实现实时通信是一项常见的需求。本文将介绍如何使用Python和WebSocket技术实现与HTML页面的实时通信,以显示当前的实时时间。

1. WebSocket简介

WebSocket是一种全双工通信协议,允许在客户端和服务器之间建立持久连接,实现实时数据的双向传输。相较于传统的HTTP请求-响应模式,WebSocket可以实现服务器主动向客户端推送数据,从而实现实时通信。

2. 准备工作

在开始之前,我们需要安装Python的websockets库。可以使用以下命令进行安装:

pip install websockets

3. Python后端代码

首先,我们编写一个Python的WebSocket服务器端代码,用于向客户端发送当前的实时时间。

import asyncio
import websockets
import datetime


async def time_server(websocket):
    while True:
        # 加上时间戳 精确到毫秒
        dt_ms = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S.%f')
        print(dt_ms)
        await websocket.send(dt_ms)
        await asyncio.sleep(1 / 50)


start_server = websockets.serve(time_server, 'localhost', 5001)

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

上述代码中,我们定义了一个名为time_server的协程,用于不断向连接的客户端发送当前的时间。在循环中,我们使用datetime模块获取当前时间,并将其格式化为带有毫秒的字符串。然后,我们使用await websocket.send(dt_ms)将时间信息发送给客户端。asyncio.sleep(1 / 50)用于控制发送频率,这里设置为每秒钟发送50次。

最后,我们使用websockets.serve()方法创建一个WebSocket服务器,并将其绑定到本地的5001端口。

4. HTML前端代码

接下来,我们编写一个简单的HTML页面,用于显示实时时间。

<!DOCTYPE html>
<html>

<head>
    <title>实时时间</title>
</head>

<body>
    <h1>实时时间:</h1>
    <p id="time"></p>

    <script>
        function connectWebSocket() {
            var socket = new WebSocket('ws://localhost:5001');

            socket.onopen = function (event) {
                console.log('WebSocket连接已打开');
            };

            socket.onmessage = function (event) {
                var timeElement = document.getElementById('time');
                var dt_ms = event.data;
                console.log(dt_ms);
                timeElement.textContent = dt_ms;
            };

            socket.onclose = function (event) {
                console.log('WebSocket连接已关闭');
                // 尝试重新连接
                setTimeout(connectWebSocket, 1000/2);
            };
        }

        connectWebSocket();
    </script>
</body>

</html>

在上述HTML代码中,我们使用JavaScript创建了一个WebSocket对象,通过new WebSocket('ws://localhost:5001')建立与服务器的WebSocket连接。这里的URL指定了服务器的地址和端口。

当WebSocket连接成功建立时,socket.onopen事件被触发,我们在控制台输出一条连接成功的消息。

当接收到服务器发送的消息时,socket.onmessage事件被触发,我们将接收到的时间信息更新到页面上,通过document.getElementById('time')获取时间显示的元素,并使用textContent属性将时间信息设置为接收到的数据。

如果WebSocket连接关闭,socket.onclose事件被触发,我们输出一条连接关闭的消息,并尝试重新连接,通过setTimeout(connectWebSocket, 1000/2)设置延迟进行重新连接。

5. 运行效果(延迟)

将上述的Python代码保存为server.py,HTML代码保存为index.html。然后在命令行中运行以下命令启动Python服务器:

python server.py

在浏览器中打开index.html,即可看到页面上实时显示的时间。

效果图

image-20230716114007736

6. 总结

本文介绍了如何使用Python和WebSocket技术实现与HTML页面的实时通信。通过建立WebSocket连接,Python服务器可以主动向客户端推送数据,实现实时通信的效果。这种方法可以在各种Web应用中使用,为用户提供实时的数据更新和交互体验。希望本文对您理解WebSocket的使用以及实现实时通信有所帮助。

标签:WebSocket,python,实时,server,Python,html,Websocket,dt,连接
From: https://www.cnblogs.com/dapenson/p/17557656.html

相关文章

  • pytorch使用(三)用PIL(Python-Imaging)反转图像的颜色
    1.多数情况下就用这个,不行再看下面的fromPILimportImageimportPIL.ImageOps#读入图片image=Image.open('your_image.png')#反转inverted_image=PIL.ImageOps.invert(image)#保存图片inverted_image.save('new_name.png')2.如果图像是RGBA透明的,参考如下代码......
  • pytorch使用(二)python读取图片各点灰度值or怎么读、转换灰度图
    python读取图片各点灰度值方法一:在使用OpenCV读取图片的同时将图片转换为灰度图:img=cv2.imread(imgfile,cv2.IMREAD_GRAYSCALE)print("cv2.imread(imgfile,cv2.IMREAD_GRAYSCALE)结果如下:")print('大小:{}'.format(img.shape))print("类型:%s"%type(img))print(img)......
  • Python教程(4)——Python开发工具PyCharm的下载与安装
    PyCharm是一种专业的Python集成开发环境(IDE),由JetBrains公司开发和维护。它提供了丰富的功能和工具,帮助开发人员更高效地编写、调试和测试Python代码。如果是一些大型Python项目强烈推荐用这个来开发。今天我们来介绍一下PyCharm的下载与安装。PyCharm的下与载安装首先需要到PyCh......
  • Python的多线程(threading)与多进程(multiprocessing )
    可以用来做后台任务,可以在djangoview中调用,当做异步任务考核系统中要的threading,用来异步考核结果和考核进度的统计Python的多线程(threading)与多进程(multiprocessing)......
  • python: thread
     defdance():for_inrange(3):print("dancd")time.sleep(1)defsing():for_inrange(3):print("sing")time.sleep(1)defdance(n):for_inrange(n):print("dancd")......
  • python3: pip3 网络源配置
    python3:pip3网络源配置    一、pip3网络源配置 1、没有的路径、文件,要自己建立。[[email protected]]$cd~/.pip[[email protected]]$[[email protected]]$[[email protected]]$lspip.conf[[email protected]]$[[email protected]]$[[email protected]]$catpip.conf[global]index-ur......
  • Python学习3
    Python学习11Python列表11.1Python集合(数组)Python编程语言中有四种集合数据类型:列表(List)是一种有序和可更改的集合。允许重复的成员。元组(Tuple)是一种有序且不可更改的集合。允许重复的成员。集合(Set)是一个无序和无索引的集合。没有重复的成员。词典(Dictionary)是......
  • python魔术方法类构建篇
    本篇章的很多魔术方法都是跟class的建立有关的4,类构建篇__init_subclass____set_name____class_getitem__和__mro_entries____prepare____instancecheck__和__subclasscheck__ __init_subclass__方法__init_subclass__这个方法你要定义在基类里面,然后当你以这个类为基......
  • python,质谱数据,加噪声后用小波神经网络,二分类预测
    #库的导入importnumpyasnpimportpandasaspdimportmath#激活函数deftanh(x):return(np.exp(x)-np.exp(-x))/(np.exp(x)+np.exp(-x))#激活函数偏导数defde_tanh(x):return(1-x**2)#小波基函数defwavelet(x):return(math.cos(1.75*x))*(np.......
  • python爬虫抓取小说
    我这里是使用的requests模块和re(正则)模块可以模仿浏览器正常访问网页返回网页源码的方式,通过正则获取到小说的名字,以及每个章节名称和对应的网页链接,并将小说正文截取出来,写入到文本中,具体代码实现如下:#导入requests模块importrequests#导入re(正则)模块importre#下......