python网络编程实现服务器和应用后台交互
多进程并发面向对象实现
from socket import *
from multiprocessing import Process
import re
HOST='0.0.0.0'
PORT=8000
ADDR=(HOST,PORT)
DEBUG=True
class HTTPsever:
def __init__(self):
self.addr=ADDR
self.sockfd=socket()
self.bind()
def bind(self):
self.sockfd.setsockopt(SOL_SOCKET,SO_REUSEADDR,1)
self.sockfd.bind(self.addr)
def start(self):
self.sockfd.listen(5)
while True:
try:
connfd,addr=self.sockfd.accept()
print('client from:',addr)
except KeyboardInterrupt:
return
except Exception as e:
print(e)
continue
p=Process(target=self.handle,args=(connfd,))
p.deamon(Tuer)
p.start()
def handle(self,connfd):
data=connfd.recv(1204).decode()
print(data)
pattern = r"(?P<method>[A-Z]+)\s+(?P<info>/\S*)"
pattern=re.match(pattern,data).group()
patter=pattern.split(' ')
if patter:
patte=self.login(patter[1])
reponse = "HTTP/1.1 200 OK\r\n"
reponse += "Content-Type:text/html\r\n"
reponse += '\r\n'
reponse += patte
connfd.send( reponse.encode() )
def login(self,pattern):
s=socket()
s.connect(('127.0.0.1',8080))
s.send(pattern.encode())
data=s.recv(1024).decode()
if data=='OK':
return data
if __name__=='__main__':
http01=HTTPsever()
http01.start()
python应用后台代码
from socket import *
from multiprocessing import Process
HOST = '0.0.0.0'
PORT = 8080
ADDR = (HOST, PORT)
class HTTPsever:
def __init__(self):
self.addr = ADDR
self.sockfd = socket()
self.bind()
def bind(self):
self.sockfd.setsockopt( SOL_SOCKET, SO_REUSEADDR, 1 )
self.sockfd.bind( self.addr )
def start(self):
self.sockfd.listen( 5 )
while True:
try:
connfd, addr = self.sockfd.accept()
print( 'client from:', addr )
except KeyboardInterrupt:
return
except Exception as e:
print( e )
continue
p = Process( target=self.handle, args=(connfd,) )
p.start()
def handle(self, connfd):
data = connfd.recv( 1204 ).decode()
if data:
connfd.send(b'OK')
h=HTTPsever()
h.start()