-
Notifications
You must be signed in to change notification settings - Fork 0
/
server.py
87 lines (72 loc) · 2.12 KB
/
server.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# -*- coding=utf-8 -*-
import socket
import threading
import queue
from HttpHead import HttpRequest
import _thread
import time
import re
# 每个任务线程
class WorkThread(threading.Thread):
def __init__(self, work_queue):
super().__init__()
self.work_queue = work_queue
self.daemon = True
def run(self):
while True:
func, args = self.work_queue.get()
func(*args)
self.work_queue.task_done()
# 线程池
class ThreadPoolManger():
def __init__(self, thread_number):
self.thread_number = thread_number
self.work_queue = queue.Queue()
for i in range(self.thread_number): # 生成一些线程来执行任务
thread = WorkThread(self.work_queue)
thread.start()
def add_work(self, func, *args):
self.work_queue.put((func, args))
def tcp_link(sock, addr):
print('Accept new connection from %s:%s...' % addr)
request=None
Content_Length = 0
try:
bb=True
tmprequest = sock.recv(10240)
request=tmprequest
pat=b"Content-Length: (.*?)\r"
Content_Length=0
cont=re.findall(pat,request)
tmplen=cont[0]
tmpint=tmplen.decode()
Content_Length=int(tmpint)
while len(request)<Content_Length:
tmprequest = sock.recv(10240)
request=request+tmprequest
except Exception as e:
pass
http_req = HttpRequest()
http_req.passRequest(request)
try:
sock.send(http_req.getResponse().encode('utf-8'))
except Exception as e:
print(e)
sock.close()
def start_server(port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('0.0.0.0', port))
s.listen(30)
thread_pool = ThreadPoolManger(5)
print('listen in %s:%d' % ('0.0.0.0', port))
print("version:20200223")
while True:
sock, addr = s.accept()
thread_pool.add_work(tcp_link, *(sock, addr))
if __name__ == '__main__':
for i in range(8000,8020):
_thread.start_new_thread(start_server,(i,))
while True:
time.sleep(1000)
# start_server(9999)
pass