连接Web服务器到浏览器(Python)

时间:2017-11-19 17:07:52

标签: python browser webserver python-multithreading

我尝试使用套接字和线程(用于多线程)来创建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)

1 个答案:

答案 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"