單程序但鏈結非阻塞web靜態伺服器
"""
@author: bre athy
@contact:
@productware: pycharm
@file: 單程序但鏈結非阻塞web靜態伺服器.py
@time: 2019/11/9 5:33
"""import socket,re
defservice_client
(new_socket,recv_data)
: path = r"e:\__init__\downloads\compressed\mikutap (2)"
ret = re.match(r"get (.*?) h"
, recv_data)
ifnot ret:
print
("客戶端連線已斷開"
)else
:if ret.group(1)
== r"/"
: path += r"\index.html"
else
: path += ret.group(1)
.replace(
"/",
"\\"
)# 準備應答內容
("頁面不在了喲"
:# 建立套接字並繫結
tcp_server_socket=socket.socket(socket.af_inet,socket.sock_stream)
tcp_server_socket.bind((""
,7788))
# 準備監聽
tcp_server_socket.listen(
128)
# 套接字非堵塞,如果沒有連線就會報異常
tcp_server_socket.setblocking(
false
)# 儲存客戶端連線套接字的列表
client_socket_list=
while
true
:try
:# 等待客戶端連線
new_socket,addr=tcp_server_socket.accept(
)except exception as ret:
pass
else
:# 收到的客戶端套接字也要設定非堵塞
new_socket.setblocking(
false
)# 儲存到列表
# 遍歷列表
for client_socket in client_socket_list:
# 資料沒收到會報出異常
try:
recv_data=client_socket.recv(
1024
)except exception as ret:
pass
else
:# 有返回值,但返回值為空,這是關閉連線的訊號
if recv_data:
recv_data=recv_data.decode(
"gbk"
) service_client(client_socket,recv_data)
else
: client_socket.close(
) client_socket_list.remove(client_socket)
# 為客戶端服務
if __name__ ==
"__main__"
: main(
)
Web靜態伺服器 非堵塞模式
coding utf 8 from socket import import time 用來儲存所有的新鏈結的socket g socket list list defmain server socket socket af inet,sock stream server socket.setsoc...
python 非阻塞tcp伺服器
importsocket importtime defmain 建立乙個 tcp伺服器端 tcp server socket.socket socket.af inet,socket.sock stream 復用tcp server.setsockopt socket.sol socket,sock...
web靜態伺服器 epool
以下 支援http的長連線,即使用了content length import socket import time import sys import re import select class wsgiserver object 定義乙個wsgi伺服器的類 def init self,port...