ホームページ  >  に質問  >  本文

nginx - http データを受信した後にサーバーがソケット クライアントに積極的に通知するようにするにはどうすればよいですか?

これで、スマート電球を操作したいと思います。これが私が現在Webページで操作し、データを送信してhttp経由でデータベースに保存する方法です。サーバーに接続すると、無限ループでデータベースからクライアントにデータが取得され、クライアントが 100,000 個など多数ある場合は、1 秒あたり 100,000 回データベースにクエリを実行する必要があります。サーバーが http データを受信すると、すぐにクライアントに渡されるため、データベースに保存する必要がありません。

PHP中文网PHP中文网2714日前599

全員に返信(3)返信します

  • 世界只因有你

    世界只因有你2017-05-16 17:08:59

    「websocket」を試してみてください
    また、クエリのたびにデータベースを操作することはお勧めできません。読み取ってキャッシュに保存したり、クエリごとにキャッシュから直接読み取ることもできます。 次に、別のプロセスが値の変更を監視し、データベースを変更しながらキャッシュを更新します。

    返事
    0
  • PHP中文网

    PHP中文网2017-05-16 17:08:59

    メモリ内データベース Redis を検討し、それを定期的に永続化する、つまりディスクに保存することができます。

    返事
    0
  • 某草草

    某草草2017-05-16 17:08:59

    クライアントがたくさんいるのに、なぜ10万回も読まなければならないのですか?クライアントとサーバーは永続的に接続されており、マッピングはサーバーのメモリに保存されます:

    リーリー

    http が送信されてデータベースに保存され、サーバーはデータベース情報を無限ループで読み取り、それがクライアントに送信される場合、メッセージにはクライアントの client_id が含まれている必要があります。これはブロードキャストされ、すべてのクライアントはマップを走査して送信するだけで済みます。データベースが読み取られる回数は、クライアントの数ではなく、メッセージの数にのみ関係します。

    上記のデータベースは、redis や nsq などのメッセージ キューを使用して実装できます。サーバーは、データベースに保存されている場合、複数のスレッドまたはコルーチンを開くことができます。サービス 端末がクラッシュした場合、データは失われませんか?信頼性は保証できません。

    返事
    0
  • キャンセル返事