2017-04-11 22 views
1

この質問のスタックが間違っていると、残念です。サーバー再起動のNode.jsとSocket.IO通知の警告

私は、Heroku上で動作するNode.jsサーバーを持っています。私が何かをコミットするたびに、サーバーが再起動します。私は、再起動して自分の経験を完全に破らないようにユーザーに警告したい。単に「X分でサーバーを再起動する」というテキストの簡単な通知。

私はクライアント側をすべてセットアップし、通知を表示するために必要なのはSocket.IOを送信するだけです。 どうすればいいですか?私は、クライアント側でサーバが通知を出すような機能があると思っていましたが、簡単に悪用される可能性があります。

+0

認証と承認が適切な場合は、何らかの種類がありますか?管理者以外のクライアントからこの管理機能を制限することができます。 – cubrr

+0

@cubrrいいえ、私は持っていません。関数がサーバーでチェックする秘密のコードワードが必要な場合は、それで十分でしょうか? –

答えて

1

答えはHerokuのは、それをシャットダウンするためにあなたのアプリに送信するSIGTERM信号を検出することであり、その信号が検出されると、すべての接続されたクライアントへの通知を発するように:

process.on('SIGTERM',() => { 
    // send your signal 
}) 

ただし、ユーザーがサーバーを再起動したことをユーザーが一度も気付かないようにすることは、ユーザーの利便性向上につながります。ノードでは、これは難しいことではありません、あなただけの必要があります。

  1. すべてのクライアントを確保するために
  2. (すぐに数秒間である)あなたのプロセスが迅速に終了し、起動するようにするにはこれがに組み込まれています(再接続ロジックを持っていますsocket.io

    heroku features:enable -a myapp preboot(1つのサーバ間のデルタが下るようになりますこれは、プリブートをオンにし、来る別がゼロに近いことが、
  3. オプション)あなたは何もする必要はありませんので、

+0

私は同意しますが、私は再接続ロジックを持っていないと私はそれを達成することはできないと信じているユーザーのために不可欠であり、リアルタイム(それはゲーム)を変更しているサーバーのデータがあり、そのデータはなくなっています。また、数分ではなく、数分前に再起動をユーザーに警告したいと思います。 _that_を行う簡単な方法はありますか?私はあなたの答えを、ありがとう! –

+0

Redisのようなものを使ってデータを保持しようとすると、データが失われてしまいます。プライマリが安定して安定するまで、フォールバックサーバーに再接続するだけで済みます。クライアントはサーバではなく代替サーバへの再接続を処理する必要があります。プライマリサーバーはちょうど "ちょっとシャットダウンしようとしている"と叫ぶべきです..ゲームアーテクターでは、ゲームの各コンポーネント(地図、チャットなど)ごとに異なるサーバーがあります – Gntem

+0

数分前に再起動についてユーザーに通知する方法はありません。 私はあなたがしたいと思っているとは思えません。サーバープロセス自体に状態を保持している限りです(redisのような何らかのストレージに対して)。 – hunterloftis

関連する問題