实现一个http服务器需要怎样进行?需要哪些知识

实现一个http服务器需要怎样进行?需要哪些知识,第1张

需要socket(套接字)编程、HTTP协议的知识,实现一个最简单的HTTP服务器,其实就是根据HTTP协议的通信规则来发送socket数据,往往是绑定(用bind调用)一个socket(套接字)然后监听(用listen调用)80端口,具体任何实现可以参考网上的一些简单的代码。之所以说这是最简单的HTTP服务器,是因为HTTP服务器还要处理并发、缓存等功能,更进一步还要支持某种动态脚本比如PHP的模块。

端口只能绑定一个进程

1 换成线程实现 SocketServer.ThreadingTCPServer

2 主进程调度分发。主进程收到端口请求后通过进程间通信让其他进程工作。

我想要用 python 的 multiprocessing 模块实现一个多进程多线程的 http 服务器,服务器会使用进程池 Pool 创建多个子进程,然后每个子进程再用 socketserver 创建多线程的 http 服务器,但是现在我遇到一个问题,就是服务器运行以后,只有第一个子进程可以处理 http 连接,如何做到让每一个子进程都可以处理连接?

备注:通过 getpid 可以看到每次接受请求的都是同一个子进程

# Python 3import os, socketserver, signal, sysfrom multiprocessing import Poolclass MyTCPHandler(socketserver.BaseRequestHandler):

def handle(self):

self.data = self.request.recv(1024)

respone = b'HTTP/1.1 200 OK\r\n\r\nOK%d' % os.getpid()

self.request.sendall(respone)def httpd_task():

socketserver.ThreadingTCPServer.allow_reuse_address = True

server = socketserver.ThreadingTCPServer(('0.0.0.0', 80), MyTCPHandler)try:

server.serve_forever()except:pass

server.server_close()if __name__=='__main__':

p = Pool(4)for i in range(4):

p.apply_async(httpd_task)

p.close()

p.join()


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/183398.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-29
下一篇2023-03-29

发表评论

登录后才能评论

评论列表(0条)

    保存