0

まず、長さが定義されていない HTTP 応答の読み取りに関する問題を解決するのを手伝ってくれた場合は、感謝します。私はあなたのアドバイスを受けて、HTTP 応答から生の Java ソケットに切り替えました。しかし、これにも少し問題があります。

プッシュ サーバーの性質は、受信したものをクライアントにプッシュすることです (私の場合、システムはデバイス ID でラベル付けされたファイルを使用します)。問題は、Java チュートリアルの KnockKnock の例のコード:

while ((inputLine = in.readLine()) != null) {...   

何かを送信する前に、クライアントが何かを送信するのを待ちます。だから私は使用することにしました:

while (true) {
    if ((inputLine=in.readLine())==null) inputLine="";
    ...

入力インターペリターのいずれかがこの空の文字列を取得した場合、それらは何もしません。

私の質問は基本的にどちらが優れているかということです.それが最初のものである場合、スレッドを生成せずに必要なものを送信するためにファイルをチェックし続けるにはどうすればよいですか?

4

1 に答える 1

2

最初のものは、KnockKnock の例で想像されたプロトコルを実装します。クライアントが「KnockKnock」を送信し、サーバーが応答します。

2つ目はあまり意味がありません。クライアントがサーバーに対して開いている出力ストリームを持っていて、サーバーが を呼び出すreadLine()場合、クライアントからの行を待っていることを意味します。そして、クライアントが回線を送信するか、ソケットを閉じるまで、呼び出しはブロックされます。

クライアントからの入力を期待していないようです。この場合、まあ、入力ストリームをまったく開いたり、入力ストリームを呼び出したりしないでくださいreadLine()(明らかに)。送信したいときにすぐに、送信する必要があるものをクライアントに直接送信します。

于 2012-12-28T16:29:43.570 に答える