2017-04-25 7 views
1

나는 매우 간단한 HTTPServer를 Python으로 구현했습니다. 코드는 다음과 같습니다 :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 초마다 자동으로 새로 고쳐지면 좋을 것입니다. 저는 파이썬에 매우 익숙하며 특히 웹 코딩을 처음 접했습니다. LiveReload 그러나이 두 라이브러리를 함께 병합하는 방법에 대해 머리를 맞출 수는 없습니다.

당신의 도움이

+0

당신은 서버 측에서 페이지를 다시로드 브라우저를 강제 할 수 없다. 이것은 클라이언트 측에서만 가능합니다. livereload는 재로드를 구현하는 일부 자바 스크립트를 사용하여 제공된 페이지를 패치합니다. [https://github.com/lepture/python-livereload/blob/master/livereload/server.py#L222] – languitar

답변

2

는 새로 고침을 알려 서버를 원하는 경우 클라이언트에 연결이 필요합니다 주셔서 감사합니다. HTTP 서버는 정보 (HTML)를 보내고 클라이언트가 정보를 처리했음을 의미합니다. 그 이상의 커뮤니케이션은 없습니다. 이를 위해서는 AJAX 또는 웹 소켓을 구현해야합니다. 두 프로토콜 모두 잦은 통신을 허용합니다.

통신 할 수 없으므로 처음에 보내는 콘텐츠에서 새로 고침을 자동화해야합니다. 이 예에서는 페이지를 30 초마다 새로 고치기를 원합니다. 이 HTML이나 자바 스크립트 중 하나에서 할 수 있습니다 :

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

또는

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

python을 통해 페이지를 변경할 수 있습니까? 이 코드가 삽입되어 있습니까? – Kev1n91