websocket是什么?如何在python中使用?

一、websocket是什么

WebSocket是一种通信协议,用于在客户端(如Web浏览器)和服务器之间建立持久的、双向的全双工通信通道。与传统的HTTP协议不同,WebSocket允许服务器主动向客户端推送数据,而不需要客户端每次都发起请求。这使得WebSocket特别适合需要实时更新数据的应用,如聊天应用、实时通知、在线游戏、股票行情等。

WebSocket协议的特点包括:

  • 双向通信:客户端和服务器可以随时互相发送消息,而不需要客户端首先发起请求。
  • 低延迟:WebSocket连接一旦建立,就保持打开状态,不需要为每次通信重新建立连接,从而降低了通信延迟。
  • 效率高:WebSocket使用较少的通信开销,因为在建立连接后,数据帧的头部信息很小。
  • 基于消息的通信:数据以消息的形式传输,每个消息可以包含多个数据帧。 持久连接:连接一旦建立,可以一直保持,直到客户端或服务器主动关闭连接。

WebSocket连接的建立过程如下:

握手阶段:客户端发送一个WebSocket握手请求给服务器,服务器响应握手请求并建立连接。
数据传输阶段:连接建立后,客户端和服务器可以通过该连接进行双向的数据传输。
连接关闭:任一方都可以随时关闭连接。
WebSocket的典型使用场景包括:

  • 实时聊天应用
  • 实时在线游戏
  • 实时数据推送(如股票行情、体育赛事比分等)
  • 协同编辑工具(如Google Docs)

在Web开发中,使用WebSocket通常需要客户端的JavaScript代码与服务器端的WebSocket库配合实现。

二、 基于fastapi的使用

服务端代码:

from fastapi import FastAPI, WebSocket, WebSocketDisconnect

app = FastAPI()

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    try:
        while True:
            data = await websocket.receive_text()
            await websocket.send_text(f"Message text was: {data}")
    except WebSocketDisconnect:
        print("Client disconnected")

客户端代码:

<!DOCTYPE html>
<html>
<head>
    <title>WebSocket Test</title>
</head>
<body>
    <h1>WebSocket Test</h1>
    <textarea id="messages" rows="10" cols="30"></textarea><br>
    <input type="text" id="messageText" placeholder="Enter message">
    <button onclick="sendMessage()">Send</button>

    <script>
        var websocket = new WebSocket("ws://127.0.0.1:8000/ws");

        websocket.onmessage = function(event) {
            var messages = document.getElementById('messages');
            messages.value += 'Server: ' + event.data + '\n';
        };

        function sendMessage() {
            var input = document.getElementById("messageText");
            websocket.send(input.value);
            var messages = document.getElementById('messages');
            messages.value += 'Client: ' + input.value + '\n';
            input.value = '';
        }
    </script>
</body>
</html>

三、总结

前端页面中的代码在加载时会立即与服务端建立 WebSocket 连接,即页面一旦被加载,就会调用对应的@app.websocket(“/ws”)函数(此后执行while true中的代码)

  • 13
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值