Python长连接Socket:实现持久通信

在网络编程中,长连接(Long Connection)是一种常见的通信模式,它允许客户端和服务器之间建立持久的连接,从而实现高效的数据传输。在Python中,我们可以通过socket库来实现长连接。本文将详细介绍如何使用Python的socket库来创建长连接,并提供相应的代码示例。

旅行图

在开始之前,让我们通过旅行图来了解长连接的整个流程:

journey
    title 长连接流程
    section 客户端
    客户端开始-->客户端发起连接请求
    客户端发起连接请求-->服务器接收连接请求
    section 服务器
    服务器接收连接请求-->服务器响应连接请求
    服务器响应连接请求-->建立连接
    section 通信
    建立连接-->客户端发送数据
    客户端发送数据-->服务器接收数据
    服务器接收数据-->服务器处理数据
    服务器处理数据-->服务器发送响应
    服务器发送响应-->客户端接收响应
    客户端接收响应-->通信结束
    通信结束-->客户端断开连接
    客户端断开连接-->服务器断开连接

代码示例

以下是使用Python的socket库实现长连接的示例代码:

import socket
import threading

def client():
    host = '127.0.0.1'
    port = 12345
    
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    client_socket.connect((host, port))
    
    while True:
        message = input("请输入要发送的消息:")
        client_socket.send(message.encode('utf-8'))
        response = client_socket.recv(1024).decode('utf-8')
        print(f"服务器响应:{response}")
    
    client_socket.close()

def server():
    host = '127.0.0.1'
    port = 12345
    
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind((host, port))
    server_socket.listen(5)
    
    print("服务器启动,等待客户端连接...")
    
    while True:
        client_socket, addr = server_socket.accept()
        print(f"客户端 {addr} 已连接")
        
        def handle_client():
            while True:
                message = client_socket.recv(1024).decode('utf-8')
                if not message:
                    break
                print(f"收到来自 {addr} 的消息:{message}")
                client_socket.send("服务器已收到消息".encode('utf-8'))
        
        thread = threading.Thread(target=handle_client)
        thread.start()

if __name__ == "__main__":
    server()

序列图

接下来,我们通过序列图来展示客户端和服务器之间的通信过程:

sequenceDiagram
    participant C as 客户端
    participant S as 服务器

    C->>S: 发起连接请求
    loop 等待服务器响应
        S->>C: 响应连接请求
    end
    C->>S: 发送数据
    S->>C: 接收数据
    S->>C: 处理数据
    S->>C: 发送响应
    C->>S: 接收响应
    C->>S: 断开连接
    S->>C: 断开连接

结尾

通过本文的介绍,我们了解到了长连接的概念以及如何在Python中实现长连接。长连接可以提高通信的效率,减少连接建立和断开的开销。希望本文对您有所帮助,感谢您的阅读!