我尝试使用套接字和线程(用于多线程)来创建Web服务器。我尝试将此服务器与127.0.0.1:8888连接但它失败了 由于我是python的入门者,我很难捕捉到错误。请帮我修复这些错误。 这是代码。
(+我使用的是python 2.7,我得到的错误是127.0.0.1拒绝来自浏览器的连接,python上没有错误消息。)
import BaseHTTPServer
import socket
import threading
import time
#making method
class Handler(BaseHTTPServer.BaseHTTPRequestHandler):
def _set_headers(self):
#error handling
if self.protocol_version != 'HTTP/1.1':
self.send_error(400)
return
elif self.path !='/':
self.send_error(404)
return
else:
self.send_respose(200)
self.send_header('Content-type', 'text/html')
self.send_header('Content-length', 1024)
self.end_headers()
def do_GET(self):
self._set_headers()
self.wfile.write('Hello World')
return
def do_PUT(self):
content_length=int(self.headers['Content-Length'])
put_data=self.rfile.read(content_length)
self._set_headers()
self.wfile.write('Hello World')
return
#making one socket
sock=socket.socket (socket.AF_INET, socket.SOCK_STREAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('',8888))
sock.listen(5)
#multi threading
class Thread(threading.Thread):
def __init__(self, i):
threading.Thread.__init__(self)
self.i=i
self.start()
def run(self):
server = BaseHTTPServer.HTTPServer(('',8888), Handler)
server.socket=sock
server.server_bind=self.server_close= lambda self: None
server.serve_forever()
if __name__=='__main__':
print('Started WebServer on port 8888')
[Thread(i) for i in range(100)]
time.sleep(100)
答案 0 :(得分:0)
我不完全理解你为什么要在同一个端口上旋转100个线程,但我会建议这是一个错误。有关如何在python中创建非常简单的HTTP服务器(包括一些线程示例),请参阅此blog post。 Bellow你可以找到一个简单的线程服务器,它在单独的线程中处理每个请求。我希望它会有所帮助。
from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler
from SocketServer import ThreadingMixIn
import threading
class Handler(BaseHTTPRequestHandler):
"""This is a handler that will answer the requests"""
def do_GET(self):
self.send_response(200)
self.end_headers()
message = "Hello stella this is thread: "+threading.currentThread().getName()
self.wfile.write(message)
return
class ThreadedHTTPServer(ThreadingMixIn, HTTPServer):
"""This is the server that will use your handler."""
if __name__ == '__main__':
server = ThreadedHTTPServer(('', 8888), Handler)
print "Press Ctrl-C to stop"
try:
server.serve_forever()
print "Server is up"
except KeyboardInterrupt:
server.shutdown()
print "Server is down"