在 Python 中强制重新加载 SimpleHTTP Server

Posted

技术标签:

【中文标题】在 Python 中强制重新加载 SimpleHTTP Server【英文标题】:Force reload on SimpleHTTP Server in Python 【发布时间】:2017-09-22 13:46:50 【问题描述】:

我有一个用 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 很陌生,尤其是对 webcoding 很陌生。我找到了LiveReload,但是我无法理解如何将这两个库合并在一起。

感谢您的帮助

【问题讨论】:

您不能强制浏览器从服务器端重新加载页面。这只能在客户端进行。 livereload 使用一些实现重新加载的 javascript 修补服务页面:[github.com/lepture/python-livereload/blob/master/livereload/… 【参考方案1】:

如果您希望服务器通知客户端刷新,则需要与客户端建立连接。 HTTP 服务器意味着您已发送信息 (html),客户端将对其进行处理。除此之外没有任何交流。这将需要实现 AJAX 或 Websocket——这两种协议都允许频繁通信。

由于您无法交流,您应该自动刷新您最初发送的内容。在我们的示例中,我们会说我们希望页面每 30 秒刷新一次。这可以在 HTML 或 Javascript 中完成:

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

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

【讨论】:

是否可以通过 python 更改页面以嵌入此代码?

以上是关于在 Python 中强制重新加载 SimpleHTTP Server的主要内容,如果未能解决你的问题,请参考以下文章

如何在 cellEdit 之后强制从持久存储重新加载核心数据

如何在 jQuery 中强制页面刷新或重新加载?

在 IntelliJ 中强制重新加载环境变量...而不重新启动?

如何在 UICollectionView 中强制重新加载自定义单元格?

在 Livewire 中强制重新加载整页

如何在加载后强制 iFrame 重新加载