在Python中强制在SimpleHTTP服务器上重新加载

时间:2017-04-25 13:45:26

标签: python refresh simplehttpserver

我有一个用Python实现的非常简单的HTTPServer。代码如下:

import SimpleHTTPServer
import SocketServer as socketserver
import os
import threading

class MyHandler(SimpleHTTPServer.SimpleHTTPRequestHandler):
    path_to_image = 'RGBWebcam1.png'
    img = open(path_to_image, 'rb')
    statinfo = os.stat(path_to_image)
    img_size = statinfo.st_size
    print(img_size)

def do_HEAD(self):
    self.send_response(200)
    self.send_header("Content-type", "image/png")
    self.send_header("Content-length", img_size)
    self.end_headers()

def do_GET(self):
    self.send_response(200)
    self.send_header("Content-type", "image/png")
    self.send_header("Content-length", img_size)
    self.end_headers() 
    f = open(path_to_image, 'rb')
    self.wfile.write(f.read())
    f.close()         

class MyServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
    def __init__(self, server_adress, RequestHandlerClass):
        self.allow_reuse_address = True
        socketserver.TCPServer.__init__(self, server_adress, RequestHandlerClass, False)

if __name__ == "__main__":
    HOST, PORT = "192.168.2.10", 9999
    server = MyServer((HOST, PORT), MyHandler)
    server.server_bind()
    server.server_activate()
    server_thread = threading.Thread(target=server.serve_forever)
    server_thread.start()
    while(1):
        print "test"

如果我连接到给定的IP地址页面加载,一切都很好。如果页面每n秒自动刷新一次会很好。 我是python的新手,尤其是网络编码新手。我找到了LiveReload但是我无法理解如何将这两个库合并在一起。

感谢您的帮助

1 个答案:

答案 0 :(得分:3)

如果您希望服务器告诉它刷新,则需要连接到客户端。 HTTP服务器意味着您已发送信息(HTML),客户端将处理它。除此之外没有任何沟通。这将需要实现AJAX或Websockets - 这两种协议都允许频繁的通信。

由于您无法进行通信,因此您应该在最初发送的内容中自动刷新。在我们的示例中,我们将说我们希望页面每30秒刷新一次。这可以在HTML或Javascript中执行:

<meta http-equiv="refresh" content="30" />

setTimeout(function(){
   window.location.reload(1);
}, 30000);