欢迎访问宙启技术站
智能推送

使用Python编写一个多进程并发服务器

发布时间:2023-12-24 04:59:30

多进程并发服务器是指利用Python的multiprocessing模块实现一个服务器,能够同时处理多个客户端的请求,提高服务器的并发性能。

以下是一个使用Python编写的多进程并发服务器的例子:

import socket
from multiprocessing import Process

def handle_client(client_socket):
    """处理客户端请求的函数"""
    # 读取客户端发送的数据
    request_data = client_socket.recv(1024).decode()
    print("Received request:", request_data)
    
    # 响应客户端请求
    response = "Hello, client!"
    client_socket.send(response.encode())

    # 关闭客户端连接
    client_socket.close()
    print("Client connection closed.")

def start_server():
    """启动服务器的函数"""
    # 创建Socket对象
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 绑定IP地址和端口号
    server_address = ('', 8000)
    server_socket.bind(server_address)
    
    # 监听客户端连接
    server_socket.listen(5)
    print("Server started, listening on port 8000...")
    
    while True:
        # 接受客户端连接
        client_socket, client_address = server_socket.accept()
        print("Accepted connection from:", client_address)
        
        # 创建新的进程来处理客户端请求
        p = Process(target=handle_client, args=(client_socket,))
        p.start()

if __name__ == '__main__':
    start_server()

上述代码中,首先定义了一个handle_client函数,用来处理客户端的请求。在这个函数中,首先使用recv方法读取客户端发送的请求数据,然后打印出来。接着,构造一个响应数据,并使用send方法将其发送给客户端。最后,关闭客户端连接,并打印出关闭信息。

start_server函数用来启动服务器。首先创建一个Socket对象,然后使用bind方法绑定IP地址和端口号。接着,使用listen方法开始监听客户端连接。在一个无限循环中,调用accept方法接受客户端连接,并获取客户端对象和客户端地址。然后,创建一个新的进程,将客户端对象传递给handle_client函数作为参数,并启动进程来处理客户端请求。

main函数中,调用start_server函数来启动服务器。

为了测试这个多进程并发服务器,可以使用一个客户端程序来连接服务器。

以下是一个简单的客户端程序示例:

import socket

def start_client():
    """启动客户端的函数"""
    # 创建Socket对象
    client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    
    # 连接服务器IP地址和端口号
    server_address = ('localhost', 8000)
    client_socket.connect(server_address)
    
    # 向服务器发送请求数据
    request = "Hello, server!"
    client_socket.send(request.encode())
    
    # 接收服务器响应数据
    response = client_socket.recv(1024).decode()
    print("Received response:", response)
    
    # 关闭客户端连接
    client_socket.close()

if __name__ == '__main__':
    start_client()

上述客户端程序首先创建一个Socket对象,并使用connect方法连接服务器的IP地址和端口号。然后,使用send方法发送请求数据给服务器。接着,使用recv方法接收服务器的响应数据,并打印出来。最后,关闭客户端连接。

运行服务器程序后,在另一个终端中运行客户端程序,就可以进行测试了。

以上就是使用Python编写多进程并发服务器的例子。多进程并发服务器可以同时处理多个客户端的请求,提高了服务器的并发性能。使用多进程可以充分利用多核CPU的优势,实现并行处理。