import socket
from multiprocessing import Process
# 调用地址http://ip:8000/
def handle_client(client_socket):
"""
处理客户端请求
"""
#最多每次接受1024字节
request_data = client_socket.recv(1024)
print("request data:", request_data)
# 构造响应数据,
# 响应头,HTTP/1.1是协议版本,200是状态,ok是响应体
response_start_line = "HTTP/1.1 200 OK\r\n"
response_headers = "Server: My server\r\n"
response_body = "<h1>Python HTTP Test</h1>"
response = response_start_line + response_headers + "\r\n" + response_body
# 向客户端返回响应数据
client_socket.send(bytes(response, "utf-8"))
# 关闭客户端连接
client_socket.close()
if __name__ == "__main__":
#实例化socket对象
# SOCK_STREAM表示面向连接的数据传输方式,http 协议使用 SOCK_STREAM 传输数据,因为要确保数据的正确性,否则网页不能正常解析
#用于通信:如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合,使得主机上运行的一个程序(又名一个进程)与另一个运行的程序进行通信。这就是所谓的进程间通信
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 通过bind()方法与特定端口绑定,允许服务器在绑定到特定端口之前,先设置ServerSocket的一些选项。因为一旦服务器与特定端口绑定,有些选项就不能再改变了。
server_socket.bind(("", 8000))
#服务允许的最大连接数
server_socket.listen(128)
while True:
# 等待连接
client_socket, client_address = server_socket.accept()
print("[%s, %s]用户连接上了" % client_address)
# multiprocessing模块的功能众多,支持子进程,通信,共享数据,执行不同形式的同步。为些它提供了Process、Queue、Pipe、Lock等组件。)Lock等组件
# target表示调用的对象,就是子进程要执行的任务。args指定的为传结target函数的位置参数,是一个元组形式,必须有逗号,如:args=('monicx',)
handle_client_process = Process(target=handle_client, args=(client_socket,))
# start(): 启动进程
handle_client_process.start()
client_socket.close()
Python写简单的服务
最新推荐文章于 2024-07-14 15:21:37 发布
该代码示例展示了一个使用Python的socket和multiprocessing模块创建的简单HTTP服务器。服务器监听8000端口,接收客户端请求,处理并返回HTTP响应。当有新的客户端连接时,服务器会创建一个新的进程来处理请求,确保并发处理能力。
摘要由CSDN通过智能技术生成