私はさらに説明する例にまっすぐに取得してみましょう。
final var socket = new java.net.ServerSocket(1234);
for (;;)
{
try (final var client = socket.accept())
{
client.getOutputStream().write("HTTP/1.1 200 OK\r\n\r\n".concat(java.time.Instant.now().toString()).getBytes());
}
}
私は今の選択肢(の私のブラウザを開くとFirefox
咳を)私は、現在の時刻と日付を受け取ります。今の質問は、私は後の時点で、そのソケットに書き込むことができる方法です。
仮想的なソリューション
私はすでに試みたが、すべてでは動作しません。ここでの何か。
final var socket = new java.net.ServerSocket(1234);
for (;;)
{
try (final var client = socket.accept())
{
client.getOutputStream().write("HTTP/1.1 200 OK\r\n\r\n".concat(java.time.Instant.now().toString()).getBytes());
client.getOutputStream().flush();
Thread.sleep(1000L);
client.getOutputStream().write("And another paragraph.".getBytes());
}
}
結果は以下の結果をプリントアウトし、約単一の第2のWebページの読み込みである(あなたの端に別の日付と時刻のために異なる場合があります)。
2019-01-19T18:19:15.607192500Z
And another paragraph.
代わりに、私はそのような参照してください何かをしたいと思います。
- 現在の時刻と日付をプリントアウト。
- Webページの変更の内容ことなく、第2の待ちます。
- 次の段落をプリントアウトします。
どのように私はそれを実装するに行きますか?
それがロードされた後、サーバーは、Webページにテキストを書き込むことは可能ですか?はい、それは間違いですが、私はそれを疑うこれらの日は、それはほとんど行われません。私はかなり一般的な手法だったその当時、1990年代にWeb開発を開始したと。我々は無いJavaScriptを使用してブラウザにライブチャットメッセージを書くためにそれを使用しました。最近ではjavascriptので、ほとんどの場合、最良の選択肢となりますページを更新するために、クライアント側のJavaScriptを使用して、ユビキタスかつ強力です。
それは我々が当時、サーバー側の更新を書き込むために使用される技術は、今でも動作するはず、と述べました。私はそれがすべてがロードされる前に、ページの表示を開始すべきかを知らないので、あなたがあなたのブラウザで更新情報が表示されない理由があると思います。使用してチャンク転送エンコード、まだ近代的なブラウザでサポートされている1990年代の技術を、それを解決する必要があります。データの「チャンク」は完了し、ブラウザは一般的ではなく、すべてのチャンクが到着するのを待つよりも、すぐに各チャンクを処理するときに、サーバーが示すことができます。
チャンク転送エンコードを使用する最も簡単な方法のようなHTTPライブラリを使用することであるApacheのHttpComponentsを、その後、適切なクラスであなたの出力ストリームをラップ:
final var socket = new java.net.ServerSocket(1234);
for (;;)
{
try (final var client = socket.accept())
{
var outputStream = new ChunkedOutputStream(client.getOutputStream());
outputStream.write("HTTP/1.1 200 OK\r\n\r\n".concat(java.time.Instant.now().toString()).getBytes());
outputStream.flush();
Thread.sleep(1000L);
outputStream.write("And another paragraph.".getBytes());
}
}