2017-01-27 9 views
0

これはRESTful Webサービスを作成しています&、私はnode.jsを使用しています私のWebサービスで 私はいくつかのデータを送信するソケットを必要とするので、ソケットは30秒ごとにそのデータと応答を処理できます。だから、私はメッセージとしてデータを受け入れることができる "ws"ノードパッケージを使用しており、それを進めることができます。node.jsのクローズウェブソケット上のすべてのスレッドを終了します

今の問題は、私は私の接続をクローズしていたときに

は、古いproccessが継続的に働くだろう...ということです。

私はソケット&が、それは私に何かなどをお送りします、それを再度開く閉じます場合は、今毎回

first response is : 1 
after 30 seconds : 2 
after 30 seconds : 3 
after 30 seconds : 4 
after 30 seconds : 5 

よう

をインクリメントし、30秒ごとに変数i値を送ってるよう...

そう
first response is : 1 
after 30 seconds : 6 
after 30 seconds : 2 
after 30 seconds : 7 
after 30 seconds : 3 
after 30 seconds : 8 
after 30 seconds : 4 
after 30 seconds : 9 
after 30 seconds : 5 
after 30 seconds : 10 
after 30 seconds : 6 
after 30 seconds : 11 
after 30 seconds : 7 
after 30 seconds : 12 
after 30 seconds : 8 

、あなたがここに見ることができるように、それは最初にそう5から古いプロセスを続行し、新しいデータ1を送る、それは6を返し、その後2 &その後、7 .....

私はそれがnode.jsのマルチスレッドの概念のためだと思います古いデータを保持するだけでなく、新しいデータを扱うこともできます。

だから私はそれを解決する方法を手伝ってください。

答えて

0

実際には、ノードにマルチスレッドはありません(フードの下にありますが、JavaScriptレイヤーにはありません)。したがって、使用できるスレッドは1つしかなく、process.exit()で終わらせることができるスレッドが1つしかないので、スレッドを終了することはできません。

あなたのコードの一行も見ることなく、推測することはできますが、setInterval関数をリセットしないようです。あなたはまた、すべてのあなたのソケットのために何らかの種類の共有グローバル状態を使用しているようです。 setIntervalsを停止したり、ソケットの切断時にタイムアウトをキャンセルしたり、必要でない場合は、すべてのソケットに対してグローバル状態を1つも使用したりする以外には、何も言えません。

次回はいくつかのコード例を追加します。