WebSocket 是一种在服务器和客户端之间实现双向通信的协议,通过单个 TCP 连接保持持续连接。这使得信息可以无缝地双向流动,成为实时应用程序的强大工具。
本文将讨论如何在 Python 中使用 WebSocket,并提供代码示例帮助您入门。
用 Python 设置 WebSocket 服务器
要在 Python 中创建 WebSocket 服务器,可以使用 websockets 库。这是一个用于创建 WebSocket 服务器和客户端的简单而高效的库。
首先,使用 pip 安装该库:
pip install websockets
下面是一个设置 WebSocket 服务器监听传入连接的示例:
import websockets
import asyncio
async def handle_connection ( websocket, path ):
print ( f"Clientconnected from {websocket.remote_address} " )
try :
while True :
# 接收来自客户端的消息
= wait websocket.recv()
print ( f "Received message: {message} " )
# 将消息发送给客户端
wait websocket.send( f"Echo: {message} " )
except websockets.ConnectionClosed:
print ( f"Client from {websocket.remote_address} disconnected" )
# 在 localhost:12345 上启动 WebSocket 服务器
start_server = websockets.serve(handle_connection, "localhost" , 12345 )
# 运行服务器
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
在这段代码中:
handle_connection
: 该函数处理与服务器的每个连接。它接收来自客户端的信息并将其回传。websockets.serve
: 在指定的主机和端口(本例中为 localhost:12345)上启动 WebSocket 服务器。asyncio
: 服务器使用 asyncio 库异步处理多个连接。
在 Python 中设置 WebSocket 客户端
要创建 WebSocket 客户端,也可以使用 websockets 库。下面是一个连接服务器的客户端设置示例:
import asyncio
async def connect_to_server ():
uri = "ws://localhost:12345" # WebSocket 服务器 URI
async with websockets.connect(uri) as websocket:
# 向服务器发送消息
wait websocket.send( "Hello, server!" )
# 接收来自服务器的响应
= wait websocket.recv()
print ( f"Received response: {response} " )
# 运行客户端
asyncio.get_event_loop().run_until_complete(connect_to_server())
在这段代码中:
websockets.connect
: 该函数使用提供的 URI(ws://localhost:12345)建立与服务器的 WebSocket 连接。- 客户端向服务器发送消息并接收响应。
WebSocket 是一种功能强大的实时双向通信协议。使用 Python 中的 websockets 库可以轻松设置服务器和客户端。您可以利用这项技术创建各种实时应用程序,如聊天室、在线游戏和实时通知。
通过所提供的示例,您应该可以很好地开始使用 Python 中的 WebSocket!
再编写一个示例
让我们实现一个 WebSocket 服务器和客户端,其中服务器将监听传入的连接和信息。客户端将向服务器发送消息,而服务器将通过反转接收到的字符串来做出响应。我们将使用 websockets 库来处理 WebSocket 连接。
服务器代码
首先创建服务器代码:
import websockets
import asyncio
async def handle_connection(websocket, path):
"""Handle incoming connections and messages from clients."""
print(f"Client connected from {websocket.remote_address}")
try:
while True:
# Receive a message from the client
message = await websocket.recv()
print(f"Received message: {message}")
# Inverse the message (reverse the string)
reversed_message = message[::-1]
# Send the reversed message back to the client
await websocket.send(reversed_message)
print(f"Sent reversed message: {reversed_message}")
except websockets.ConnectionClosed:
print(f"Client from {websocket.remote_address} disconnected")
# Start the WebSocket server on localhost:12345
start_server = websockets.serve(handle_connection, "localhost", 12345)
# Run the server
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
客户端代码
import websockets
import asyncio
import sys
async def connect_to_server():
uri = "ws://localhost:12345" # The WebSocket server URI
async with websockets.connect(uri) as websocket:
print(f"Connected to the server at {uri}.")
print("Type your message and press Enter to send it.")
print("Type 'X' to close the connection and exit.")
try:
while True:
# Wait for user input
message = input()
if message.lower() == 'x':
# User wants to close the connection
print("Closing connection.")
break
# Send the message to the server
await websocket.send(message)
# Receive the reversed message from the server
reversed_message = await websocket.recv()
print(f"Received reversed message: {reversed_message}")
except Exception as e:
print(f"An error occurred: {e}")
# Run the client
asyncio.get_event_loop().run_until_complete(connect_to_server())
服务器如何工作
- 服务器代码在指定主机(localhost)和端口(12345)上监听传入的 WebSocket 连接。
- 客户端连接后,服务器会循环侦听传入的消息。
- 收到消息后,服务器会反转消息字符串并将其发送回客户端。
客户端如何工作:
- 客户端代码使用指定的 URI(ws://localhost:12345)连接服务器。
- 连接后,客户端在一个循环中等待用户输入。
- 如果用户输入 “X “或 “x”,客户端就会关闭连接并退出。
- 对于其他任何输入,客户端都会向服务器发送信息,并等待服务器的响应。
- 服务器的响应(反向信息)会打印在控制台上。
这些示例用 Python 提供了 WebSocket 服务器和客户端的基本实现,允许客户端向服务器发送消息,服务器通过反转接收到的消息作出响应。
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/im/47492.html