2017-05-19 39 views
0

Android IMを構築しようとしています。なぜなら、TCP接続を開いたままにして、そこからデータを読み続ける必要があるからです。例えば読み取りのためにソケット接続を開いたままにしておくのがよい方法ですか?

while(!shutdown) { 
    int count = socketChannel.read(buffer); 
    // do something with buffer 
} 
+0

あなたはこれらのメッセージをどのように受け取ることができるのか不明確です。 – EJP

+0

@EJP、あなたは驚くほどこのサイトで活動しています。ありがとうございます。ソケットからデータを取得しないと、しばらく(例えば100ms) 'Thread.sleep'を実行する方が良いでしょうか?これでCPUが節約できますか? – MrROY

答えて

0

これは実装によって異なります。ブロックされたソケットを使用している場合は、これをしたくないでしょう。これは、複数のクライアントがサーバーに接続している場合、他のすべてのクライアントがそのサーバーソケットに接続できないようにします。
あなたができることは、(いつものように)一貫して動作しているサーバソケットを持っていて、クライアントソケットでそれに接続して到着した新しいメッセージをチェックして受け取ることです。メッセージを受け取ったら、ソケットを閉じることができます。これはn秒ごとに実行できます。
他のオプションは、ブロックされていないソケット接続を使用し、それらを常に開いたままにすることですが、多くのクライアントがある場合は問題につながる可能性があります。

関連する問題