理解 Python 中的 WebSocket

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

(0)

相关推荐

发表回复

登录后才能评论