2017-04-25 78 views
1

我有一个在Python中实现的非常简单的HTTPServer。代码如下:强制重载在Python中的SimpleHTTP服务器上

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非常陌生,尤其是web编码新手。我发现LiveReload但是我无法理解我如何将这两个库合并在一起。

谢谢您的帮助

+0

你不能强迫浏览器从服务器端重新加载页面。这只有在客户端才有可能。 livereload使用一些实现重新加载的JavaScript修补了所提供的页面:[https://github.com/lepture/python-livereload/blob/master/livereload/server.py#L222] – languitar

回答

2

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

由于您无法进行通信,因此您应该在最初发送的内容中自动刷新。在我们的例子中,我们会说我们希望页面每30秒刷新一次。这是可能的HTML或JavaScript来做到:

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

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

是否有可能通过python改变页面嵌入此代码? – Kev1n91

相关问题