实现跟浏览器的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)
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
window.addEventListener("DOMContentLoaded", () => {
const messages = document.createElement("ul");
document.body.appendChild(messages);
const websocket = new WebSocket("ws://localhost:5678/");
websocket.onmessage = ({data}) => {
const message = document.createElement("li");
const content = document.createTextNode(data);
message.appendChild(content);
messages.appendChild(message);
};
});
- 通过以上代码可以实现在浏览器中使用
websockets
获取服务器的消息
关键点提示:
- 跟上一篇区别不大,这里的话server则是没有接收消息,而是只会主动发出消息
- 每隔随机的一小段时间,主动向browser发出消息,告知当前时间
- 只是在一个空白网页中运行了一个脚本,连接到服务器,并开启消息监听,不停的接收消息
- 然后通过增加html元素的方法,把获得的消息实时添加到网页中去
