2017-03-02 7 views
-1

ローカルファイル:filenameが変更されるたびに私のWebページを更新する必要があります。ソケットを使用しないと、1秒ごとにページを更新して完了させることができます。私はfilenameの内容を読んでそれを私のWebテンプレートに送ることでこれをやっていました。Flask SocketIOを使用して、ローカルファイルが変更されるたびにWebページを更新します。

しかし、自動リフレッシュを使用しないように、ソケットを使用してこのプロセスを非同期にする必要があります。私はFlaskをWebフレームワークとして使用しています。

答えて

0
socketIOの

使用は、フレームワークと非常に簡単ですフラスコ
あなたが必要とするすべてはここにある:以下https://flask-socketio.readthedocs.io/en/latest/

+0

私はそれを読んだが、私の問題の解決策を見つけることができない。正確な解決策を教えてくれますか? – Amit740

+0

正確な解決策を指摘することはできません。具体的にコードや例を挙げて説明する必要があります。正しいことを教えてください。 – kidz55

+0

ファイルがあるとします。私はログをダンプします。このファイルが更新されるたびに、このファイルが更新されていることを示すWebページ(localhost)を更新する必要があります。 – Amit740

1

ファイルを監視し、ファイルが変更されるたびにソケットメッセージを発する例フラスコアプリケーションです。あなたの内容を指定することができます

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) 

index.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> 
+0

これは正常に動作していますが、最初の2回だけです。その後、ファイルを更新するたびに、更新用のログが表示されません。私のシステムでこれは何か間違っていますか? – Amit740

+0

私はproc_fun = ModHandler()をwm.add_watch( 'test.log'、pyinotify.IN_CLOSE_WRITE、proc_fun = ModHandler())として追加することで、 – Amit740

0

(ファイル視聴するため)、これはあなたがLinuxプラットフォーム上にある前提としていますこのようなソケットのページ:

socketio.emit('connect', 
        {'field_doc': "some content", 'another_field' :"some other content"}) 
関連する問題