可以同时(伪)处理多个客户端请求
已去注释,需要注释版,我重新上传
import socket,threadpool,re,gevent
from gevent import monkey
monkey.patch_all()
def open_file(路径):
try:
print('正在读取文件内容..')
client_html_data=open(路径,'rb')
except :
return '404 页面不存在\r\n您输入的地址有误,请重新输入'.encode('gbk')
else:
html_read_data=client_html_data.read()
print(html_read_data)
client_html_data.close()
return html_read_data
def 支线函数(new_client_socket):
''' 负责服务客户端 '''
print('正在等待浏览器发送信息')
recv_data=new_client_socket.recv(10240).decode('utf-8')
print(recv_data)
ret_filename_=re.search(r'\w+\.html',recv_data)
if ret_filename_:
client_html_filename=ret_filename_.group()
print(client_html_filename)
file_data=open_file('python_demo/HTTP协议/'+client_html_filename)
else:
file_data=open_file('python_demo/HTTP协议/index.html')
return_web= 'HTTP/1.1 200 OK\r\n\r\n'
new_client_socket.send( return_web.encode('utf-8'))
new_client_socket.send( file_data)
new_client_socket.close()
print('客户端链接已断开')
print('---------------正在等待新的客户端链接---------------')
def 主函数():
''' 负责监听客户端链接 '''
print('服务端已运行---------------------------------------')
while True:
print('正在等待客户端链接')
new_client_socket,clientAddr=tcp_socket_sever.accept()
print('链接成功,客户端ip与端口:',clientAddr)
gevent.spawn(支线函数,new_client_socket)
tcp_socket_sever=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
tcp_socket_sever.bind(('127.0.0.1',8001))
tcp_socket_sever.listen(128)
if __name__ == '__main__':
主函数()