2017-02-11 6 views
0

少しでもグーグルグーグルで、何かを試してみて、本当にどこにも行かずに私の問題のあらゆる種類の奇妙な解決策を思いついた。私の質問は、どのようにsetIntervalを私のexpress.jsアプリケーションが30秒に1回実行させるのでしょうか?ExpressアプリケーションをsetIntervalに設定するにはどうすればよいですか?

これは、〜30秒ごとに変わる変数があり、これらを表示するためにページを再レンダリングする必要があるという理由があります。私が思いついた "解決策"は、古いものと同じポートに新しいサーバーを作成しようとしているので、EADDRINUSEエラーに遭遇するので、これを避けるためにここで行う必要があることが分かっていますが何?

誰かが私が試したことを知りたいのであれば、私はprocess.exitを試してみました(そしてPM2が私のアプリを再起動させました)、setIntervalは意図的に私のアプリをクラッシュさせてPM2を再起動させ、クライアントとサーバーの間を行き来するのですが、これは問題を複雑にしているように思えます。標準のsetIntervalはそれをすべて解決します。

以下

は私の急行-スクリプトです:

var express = require('express'); 
var app = express(); 
var ejs = require('ejs'); 
var config = require('./config'); 
app.set('view engine', 'html'); 
app.engine('html', ejs.renderFile); 

app.get("/", function(req, res){ 
app.use(express.static(__dirname + '/views')); 

async(function(variables) { 
    res.render('index', 
    { 
    // stuff to render 
    }); 
}); 
function async(callback) { 
    // several variables... 
    callback(variables); 
} 


}); 

app.listen(config.port, "0.0.0.0"); 
+0

サーバー側で 'setInterval'を試していますか?それは動作しません。クライアント側で設定し、目盛りに合わせてデータをリロードするか、socket.ioを使用してサーバーからクライアントにデータをプッシュします。 –

答えて

0

あなたがしたいものは、彗星、長引き、ウェブソケットevent sourcingです。

  1. がWebサーバにグローバル状態を持って、簡単なのsetIntervalをそれとのsetIntervalを更新するために、常にWebページにAJAX呼び出しを行うには:

    は、基本的にはこれは私がこの仕事にどのように動作するかです。

  2. setInterval(AJAX)の代わりにweb socketsを使用し、新しい状態をクライアントにプッシュします。

2番目のアプローチは高速であり、望ましいですが、古いブラウザをサポートする必要がある場合はフォールバックが必要な場合があります。

+0

ありがとう!これは少なくとも私に良いスタートを与えるだろう。私はこれを私の受け入れられた答えとして設定します。 :) – Erik

+0

受け入れられた回答にフォローアップの質問をしてもよろしいですか、それとも新しい質問を作成すべきですか? – Erik

+0

ここに私の質問があります: 私はウェブソケットで大きな成功を収めましたが、メッセージイベントを分ける方法がわからない状況に陥っています。クライアントは、どのイベントが下記のwebsocket on messageでmessageA/Bに行かなければならないかをどのように知っていますか?これはサーバー上に設定されていますか? '' 'クライアント: ws.onmessage = function(イベント){ messageA(event.data); messageB(event.data); }; ' 'サーバー: ws.send(JSON。stringify(messageA)、function(){...}); ..... ws.send(JSON.stringify(messageA)、function(){...}); '' ' – Erik

0

あなたは、これは正しいアプローチであることを確認していますか?私には正しいとは思われません。私はそれをしないだろう。

JSスクリプト(ページを自動更新するか、AJAX/WSを使用して値を更新する)または同等のmeta tagを使用して、クライアントでリフレッシュ機能を設定する必要があります。

+0

私はそれが正しいアプローチであるかどうかはわかりませんが、それ以外はどうすればいいか分かりません。私はexpress.jsスクリプトを再実行しないと、更新されないapp.get-functionの中にいくつかの変数があります。なぜ再実行する必要があるのでしょうか? – Erik

関連する問題