自学 websocket(五):实战上手 实现服务器向浏览器的通信

实现跟浏览器的websockets通信

  • 老规矩,先摆出代码再解释
  • 只会python不会写html和js也没有关系 代码很简洁,重点是理解websockets通信,同时能用python写一个服务器
server 端
import asyncio
import datetime
import random

import websockets


async def show_time(websocket):
    while True:
        message = datetime.datetime.utcnow().isoformat() + "Z"
        await websocket.send(message)
        await asyncio.sleep(random.random() * 2 + 1)  # 生成一个在1到3之间的随机浮点数


async def main():
    async with websockets.serve(show_time, "localhost", 5678):
        print(f"[server on 5678]")
        await asyncio.Future()


if __name__ == '__main__':
    asyncio.run(main())
网页 html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>websocket demo</title>
</head>
<body>
    <script src="show_time.js"></script>
</body>
</html>
javascript
// 当DOM加载完成后执行以下代码
window.addEventListener("DOMContentLoaded", () => {

    const messages = document.createElement("ul");  // 创建一个<ul>元素

    document.body.appendChild(messages);  // 将<ul>元素添加到<body>元素中

    const websocket = new WebSocket("ws://localhost:5678/");  // 创建一个WebSocket对象,连接到本地主机的5678端口

    websocket.onmessage = ({data}) => {  // 当接收到消息时执行以下代码

        const message = document.createElement("li");  // 创建一个<li>元素

        const content = document.createTextNode(data);  // 创建一个文本节点,包含接收到的消息内容

        message.appendChild(content);  // 将文本节点添加到<li>元素中

        messages.appendChild(message);  // 将<li>元素添加到<ul>元素中
    };
});
  • 通过以上代码可以实现在浏览器中使用websockets获取服务器的消息
关键点提示:
  • 服务器端
  1. 跟上一篇区别不大,这里的话server则是没有接收消息,而是只会主动发出消息
  2. 每隔随机的一小段时间,主动向browser发出消息,告知当前时间
  • 浏览器端
  1. 只是在一个空白网页中运行了一个脚本,连接到服务器,并开启消息监听,不停的接收消息
  2. 然后通过增加html元素的方法,把获得的消息实时添加到网页中去

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值