ほぼリアルタイムのオートメーション サーバーのプッシュまたはプル?
-
09-06-2019 - |
質問
私たちは現在、クライアントが特定のデータ要素の変更に対する関心をリクエストし、そのデータが変更されるとサーバーがデータをクライアントにプッシュバックするサーバーを開発中です。クライアントがこのデータをポーリングした方が良いかどうかについて、社内で活発な議論が行われています。
パフォーマンス、スケーラビリティ、ネットワーク負荷の観点から、ほぼリアルタイム環境でのデータ転送の理想的な方法は何だと考えられますか?
アップデート:ここにあります リンク これは、UI の更新に関して考える材料となります。
解決
すべての状況に最適な方法はおそらくありませんが、通常はプッシュの方が優れており、より頻繁に使用されます。これにより、サーバーのキャッシュとデータ転送が最適化され、パフォーマンスとスケーラビリティが向上し、クライアントのリクエストと空の応答が回避されることでネットワーク トラフィックが少し削減されます。サーバーが独自のペースで動作し、準備ができたときにデータをクライアントに提供できることは、サーバーにとって重要な利点となります。
OPC、GID などの業界標準は両方をサポートしています。サーバーはサブスクライブしているクライアントに更新をプッシュしますが、クライアントはサブスクリプションを気にせずに、めったに使用されないデータを取り出すことができます。
他のヒント
クライアントが (ファイアウォールや NAT の問題を回避するために) 接続を開始する限り、どちらの方法でも問題ありません。
送信する必要があるデータの種類が複数ある場合は、クライアントにどの種類を指定するかを指定させることができますが、これが必要になるのは接続ごとに 1 回だけです。そうすれば、サーバーが更新情報をそのまま送信し続けるようにすることができます。
クライアントが継続的に更新を要求せずに、サーバーに更新を送信させる方が、ネットワーク トラフィックが少なくなります。
クライアント側には何がありますか?多くのファイアウォールは送信リクエストを許可しますが、受信リクエストをブロックします。言い換えれば、電子メールを送信する場合を除き、インターネットを経由する場合はプルが唯一の選択肢になる可能性があります。