每次本地文件更改时使用 Flask SocketIO 更新网页

2024-01-29

每次我的本地文件:文件名更改时,我都需要更新我的网页。在不使用套接字的情况下,我只需每 1 秒刷新一次页面即可完成。我是通过读取文件名的内容并将其发送到我的网页模板来完成此操作的。

但我需要使用套接字并使该过程异步,以便不使用自动刷新。我使用 Flask 作为我的网络框架。


下面是一个示例 Flask 应用程序,它监视文件并在文件更改时发出套接字消息。请注意,这假设您位于 Linux 平台上(用于文件观看)

app.py

from flask import Flask, render_template
from flask_socketio import SocketIO
import pyinotify

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
thread = None


class ModHandler(pyinotify.ProcessEvent):
    def process_IN_CLOSE_WRITE(self, evt):
        socketio.emit('file updated')


def background_thread():
    handler = ModHandler()
    wm = pyinotify.WatchManager()
    notifier = pyinotify.Notifier(wm, handler)
    wm.add_watch('test.log', pyinotify.IN_CLOSE_WRITE)
    notifier.loop()


@app.route('/')
def index():
    return render_template('index.html', async_mode=socketio.async_mode)


@socketio.on('connect')
def test_connect():
    global thread
    if thread is None:
        thread = socketio.start_background_task(target=background_thread)


if __name__ == '__main__':
    socketio.run(app, debug=True)

索引.html

<script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
<script type="text/javascript" charset="utf-8">
    var socket = io.connect('http://' + document.domain + ':' + location.port);
    socket.on('connect', function() {
        socket.emit('my event', {data: 'I\'m connected!'});
    });
    socket.on('file updated', function(data) {                                  
        console.log('the file has been updated');
    });

</script>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

每次本地文件更改时使用 Flask SocketIO 更新网页 的相关文章

随机推荐

  • Android HttpClient 持久 cookie

    更新 这个问题及其答案不应再推荐给任何阅读本文的人 Android 不再推荐 HttpClient 阅读 已弃用 而是推荐 HttpUrlConnection http android developers blogspot de 2011
  • jQuery 偏移量为 或内联

    我创建了一个测试用例 请查看它 因为它说明了我的问题 http jsfiddle net jAD2W 6 http jsfiddle net jAD2W 6 简化示例感谢 patrick dw 为了完整起见 此代码也已添加到本文的底部 基本
  • 如何从 C 中的 IPv4 地址获取主机名?

    我需要一个简单的函数来输出char hostname 给定一个char IPAddress 有什么想法或提示吗 另外 从主机名获取 IP 地址的最简单方法是gethostbyname and inet ntoa 那是对的吗 Use geth
  • 如何引用 Java 的 KeyStroke.getKeyStroke 的 String 版本中的 mac 命令键?

    KeyStroke getKeyStroke String 的文档 例如 getKeyStroke control DELETE 没有提供如何访问 Macintosh 命令键的示例 并且我找不到列出该函数接受的 control 等修饰符的各
  • JavaScript - 通过基于特殊顺序的属性对对象数组进行排序

    我有一个具有多个属性的对象数组 给定以下数组 var people name allen age 33 color green name jon age 23 color blonde name silver age 54 color ye
  • 如何从分页 ui 网格中获取过滤数据

    我想在启用分页功能时从用户界面网格中获取过滤后的数据 一般情况下我使用 scope gridApi core on filterChanged scope function if scope gridApi grid columns 1 f
  • 实例变量继承

    有人可以解释一个类如何访问其超类的实例变量以及这为什么不是继承吗 我正在谈论 Ruby 编程语言 和示例 class Point def initialize x y Initialize method x y x y Sets initi
  • 在分发包中使用 virtualenv 部署 Django?

    我必须将 Django 应用程序部署到 SuSE Linux Enterprise 11 系统上 公司规则规定我只需要使用 RPM 进行部署 虽然我可以使用 setup py bdist rpm对于每个依赖项 这并不是真正明智的 因为 RP
  • MongoDB php $in 和 $regex

    我正在尝试结合 regex 和 in 来进行简单的搜索 例如我有一个这样的用户查询 user query for focus red 在我的每个文档的 mongodb 集合中 我都有一个关键字字段 我想获取字段关键字所在的文档 keywor
  • 二进制序列化 - 在 scala 2.10 上替换 Marshal

    由于 scala util Marshal 已弃用 如何将旧代码迁移到 scala 2 10 object Serilaizer def objectToBytes T foo T implicit expected ClassManife
  • 模块上的 __getattr__

    如何实现相当于 getattr 在一个类上 在一个模块上 Example 当调用模块的静态定义属性中不存在的函数时 我希望在该模块中创建类的实例 并使用与模块上的属性查找失败相同的名称调用其方法 class A object def sal
  • 1 台设备上的多个推送通知 - iPhone

    如何在一台设备上处理多个推送通知 例如 用户收到一条通知 称您有 1 条来自我的应用的新消息 在他检查该消息之前 另一条消息进来 所以现在他有 2 条消息 好吧 我不希望 2 条消息堆叠在通知栏中 我想要 1 条通知 表示有 2 条消息正在
  • HighCharts 系列 Z 指数

    有没有办法在不颠倒系列顺序的情况下将系列置于 Highcharts 的前面 在我的代码中 我使用了 graf 1 highcharts chart zoomType xy Highcharts 有一个zIndex http api high
  • 如何使用同一个记录器将不同级别的日志记录到控制台+日志文件?

    我有一个 log4j 记录器 当前将日志写入控制台和文件 工作正常 稍后我想将其配置为将 INFO ERROR 记录到日志文件中 但仅在控制台上显示 ERROR 为了实现这个目标我需要改变什么 log4j rootLogger INFO c
  • 关于使用 Java Swing 循环动态加载图像的问题

    public String imagesArray Images firstImage Images secondImage String imagesPath testproject images for int i 0 i
  • 如何查找哪些文件自提交后没有更改?

    在 git 中 如何找出目录中的哪些文件自某个提交以来没有更改 IMO 生成列表的更简单方法是使用以下命令链 git ls files full name grep v git diff name only
  • PHP 删除特定网站的链接但保留文本

    例如 a href http msdn microsoft com art029nr remove links to here but keep text a but a href http herpyderp com leave all
  • 如何终止 PHP 会话?

    这个一般性的话题之前已经出现过 here https stackoverflow com questions 252907 why does session start cause a timeout when one script cal
  • 如何设置 DataGridViewTextBoxColumn 的密码属性

    我用过DataGridView实现用户名密码 UI 密码显示在DataGridViewTextBoxColumn类型列 我如何使用现有的代码DataGridViewTextBoxColumn并为文本实现密码属性 处理EditingContr
  • 每次本地文件更改时使用 Flask SocketIO 更新网页

    每次我的本地文件 文件名更改时 我都需要更新我的网页 在不使用套接字的情况下 我只需每 1 秒刷新一次页面即可完成 我是通过读取文件名的内容并将其发送到我的网页模板来完成此操作的 但我需要使用套接字并使该过程异步 以便不使用自动刷新 我使用