Python的Websockets服务端
原创2025年3月18日大约 2 分钟
Python的Websockets服务端
Python的Websockets服务端
环境以及依赖package
NStudyPy~=0.0.17
NStudyPy 工具包 , 一个有用的工具包,可以简化开发流程,详细介绍可以参考 NStudyPy
本教程使用python 3.10.13
作为开发环境 , 原则上适用于python 3.9+
本教程开发环境为windows 10
,原则上其他系统应该也可以 , 但请注意需要安装对应环境的 poppler, 同时需注意配置环境变量
, 环境变量配置请参阅本站其他文档
!!本站支持全文搜索。
主要流程
- 创建项目,安装依赖
pip install NStudyPy~=0.0.17
- 使用方法
import asyncio
from NStudyPy import PyWebsockets
from NStudyPy.PyLogger import get_logger
logger = get_logger(__name__)
async def handle_service(websocket):
logger.info("Client connected")
try:
async for message in websocket:
logger.info(f"Received: {message}")
response = f"Hello from server!"
await websocket.send(response)
except Exception as e:
logger.error("Client exception:", repr(e))
if __name__ == '__main__':
asyncio.run(PyWebsockets.start_server(handle_service, logger=logger))
- 核心源码
import websockets
async def start_server(handler, host: str = "127.0.0.1", port: int = 56655, logger=None):
"""
start websocket server
:param handler:
:param host:
:param port:
:param logger:
:return:
"""
server = await websockets.serve(handler, host, port, logger=logger)
if server and logger:
logger.info("start websocket server at {}:{}".format(host, port))
await server.wait_closed()
- js调用示例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>WebSocket Client Demo</title>
<script>
// create WebSocket connection
const socket = new WebSocket("ws://127.0.0.1:56655");
// connection opened
socket.onopen = () => {
document.getElementById("status").innerText = "Connected to server";
console.log("Connected to server");
};
// message received
socket.onmessage = (event) => {
console.log(`Message from server: ${event.data}`);
const messages = document.getElementById("messages");
messages.innerHTML += `<p>Server: ${event.data}</p>`;
};
// connection closed
socket.onclose = () => {
document.getElementById("status").innerText = "Disconnected";
console.log("Disconnected from server");
};
// error handling
socket.onerror = (error) => {
console.error("WebSocket error:", error);
};
// send message
function sendMessage() {
if (socket.readyState === WebSocket.OPEN) {
const message = "Hello, Server!";
socket.send(message);
console.log(`Sent: ${message}`);
document.getElementById("messages").innerHTML += `<p>You: ${message}</p>`;
} else {
alert("WebSocket is not connected");
}
}
</script>
</head>
<body>
<h2>WebSocket Client</h2>
<button onclick="sendMessage()">Send Message</button>
<p id="status">Connecting...</p>
<p id="messages"></p>
</body>
</html>