https://codejp.quora.com/LINE%E3%81%AE%E3%82%88%E3%81%86%E3%81%AA%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%B5%E3%82%A4%E3%83%88%E3%82%92%E4%BD%9C%E3%82%8A%E3%81%9F%E3%81%84%E3%81%AE%E3%81%A7%E3%81%99%E3%81%8C-%E3%83%81%E3%83%A3%E3%83%83%E3%83%88%E7%B3%BB-%E3%83%AA%E3%82%A2%E3%83%AB%E3%82%BF%E3%82%A4%E3%83%A0%E7%B3%BB-%E3%81%AF%E4%BD%9C%E3%81%A3%E3%81%9F%E4%BA%8B%E3%81%8C%E3%81%AA%E3%81%84%E3%81%AE%E3%81%A7-%E3%81%A9%E3%81%86%E3%82%84%E3%81%A3%E3%81%A6%E4%BD%9C%E3%81%A3%E3%81%9F%E3%82%89%E3%81%84%E3%81%84%E3%81%8B%E6%95%99%E3%81%88%E3%81%A6%E3%81%8F%E3%81%A0%E3%81%95%E3%81%84-%E8%A8%80%E8%AA%9E%E3%81%AF%E3%81%AA%E3%82%93%E3%81%A7%E3%82%82%E3%81%84%E3%81%84%E3%81%A7%E3%81%99
·
はいどうぞ
バックが出来れば適当なWebSocketライブラリとか使って繋いで、Reactとか適当なJS WebUIで画面作れば完了しますね。
クライアント数がとても少ないなら、ロングポーリングである程度リアルタイムっぽいことも出来ます(ポーリングが都度更新をチェック行くのに対して、ロングポーリングはタイムアウト時間を延長して更新が無い間は応答を返さずに維持して更新があったときに応答を返すことで対応します)
つまり、普通のプログラムであればサーバサイドは普通に処理してすぐに応答しますが、ロングポーリングの考えでは雑に言えばAPI側は
- def get_new_message():
- while True:
- if timeline.check_updated():
- json = timeline.get_new_messsage().tojson()
- break
- sleep(1)
- return json
の様に、送るべき内容が来るまで待機します。 中間などがタイムアウトしたり、スマホ等IPが変わったりしたりして途切れるので、30秒とかでブレークして繋ぎ直す事になりますが、とてもシンプルで普通のポーリングほど負荷が上がらず一応のリアルタイム性が得られます。
出来ない事は無いけどスマホなどでネットワークが切り替わりがちな対象では、ピアとの通信が安定しないのでピア情報をしょっちゅう問い合わせることになるので帯域をそれほど消費するわけでも無いチャットのようなメッセージングは中央集約の方が合理的に思います。 P2Pだと受ける側の端末のあるネットワーク制約問題もあり直接繋げない環境も多く(多くのWiFi等はNATゲートウェイ経由で着信不能)、クライアントからHTTP(S)でサーバに接続を開始するスタイルが一番汎用的であると思います。
0 コメント:
コメントを投稿