、クライアントが使用して更新を受信できるように、Javaサーブレットを使用して、サーバー送信されたイベントを作成することは可能ですJavaのHTTPサーブレットを使用して動作するはずです。Javaサーブレットとサーバー送信されたイベント
答えて
これはトリックです。
HTML
<!DOCTYPE html>
<html>
<body onload ="registerSSE()" >
<script>
function registerSSE()
{
alert('test 1');
var source = new EventSource('http://frewper:8080/hello/sse');
alert('Test2');
source.onmessage=function(event)
{
document.getElementById("result").innerHTML+=event.data + "<br />";
};
/*source.addEventListener('server-time',function (e){
alert('ea');
},true);*/
}
</script>
<output id ="result"></output>
</body>
</html>
サーブレット:
import java.io.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class sse extends HttpServlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response)
{
try
{
System.out.println("SSE Demo");
response.setContentType("text/event-stream");
PrintWriter pw = response.getWriter();
int i=0;
while(true)
{
i++;
pw.write("event: server-time\n\n"); //take note of the 2 \n 's, also on the next line.
pw.write("data: "+ i + "\n\n");
System.out.println("Data Sent!!!"+i);
if(i>10)
break;
}
pw.close();
}catch(Exception e){
e.printStackTrace();
}
}
public void doGet(HttpServletRequest request,HttpServletResponse response)
{
doPost(request,response);
}
}
Jettyを使ってJDK 1.6.0_25とChromeブラウザで試しましたが、うまくいきません。サーブレットが要求を取得し、「データ送信済み」というメッセージがコンソールに表示されますが、Webページには応答が表示されません。どのようなJDKのバージョンとブラウザを使用しましたか?私はこのすべてに新しい。 – DPD
jdk 1.6.0_24を使用しました。これはTomcatを使用していました。また、ブラウザが「sse」をサポートしているかどうかを確認してください。好ましくはchromeまたはfirefoxの最新バージョンを使用してください。 – frewper
"EventSourceの応答にUTF-8ではない文字セット(" iso-8859-1 ")があります。接続を中断しています。私はデフォルトのエンコーディングだと思います。 'response.setCharacterEncoding(" UTF-8 ");' – Bakudan
サーバー送信されたイベントは、HTML5の機能です。私たちは "HTML5"と言います。したがって、クライアント側の機能です。 長いサーバーはhttps respnseヘッダー「text/event-stream; charset = UTF-8」、「接続」、「キープアライブ」を設定でき、サーバーによってサポートされています。このようなヘッダーはJava Servletで設定できます。 Here you can find a step for step guide on SSE with servlet
私は非同期モードでプレーンなJavaサーブレット内に統合することができ、非常に簡単なライブラリを作成しているので、余分なサーバスレッドは、各クライアントのために必要ありません:https://github.com/mariomac/jeasse
それはのためのポイント・ツー(SseDispatcherを統合ポイントSSE)とSseBroadcaster(イベント放送用)。使用例:
public class TestServlet extends HttpServlet {
SseBroadcaster broadcaster = new SseBroadcaster();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Scanner scanner = new Scanner(req.getInputStream());
StringBuilder sb = new StringBuilder();
while(scanner.hasNextLine()) {
sb.append(scanner.nextLine());
}
System.out.println("sb = " + sb);
broadcaster.broadcast("message",sb.toString());
}
//http://cjihrig.com/blog/the-server-side-of-server-sent-events/
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
broadcaster.addListener(req);
}
}
興味深いですね。しかし、なぜそれをLGPL(Apache 2の代わりに)ライセンスしましたか? –
@TomFennelly私は基本的に、派生コードに制限なしに自由に使用できるライセンスを「ランダムに」選択しました。あなたは別のものを使うように私に勧めますか? LGPLに不利な点はありますか? – Mario
ビジネスに優しいという点では、Apache 2は、製品の中でそれを使用する人々の所在地が制限されているという点でウィルスではありません。 –
- 1. サーブレットをサーバー送信イベント(SSE)のサーバーとして使用する
- 2. Java Webサーバーのサーバー送信イベント
- 3. サーバーがサーブレットを使用してイベントを送信しました
- 4. jQueryとAJAXまたはサーバーから送信されたイベント
- 5. uWSGIとFlaskサーバー送信イベント
- 6. EclipseのTomcatサーバー:エラー404がサーブレットに送信される
- 7. サーバーから送信されたイベントをロードする方法
- 8. PHPサーバー送信イベント - メッセージ送信者と受信トレイ
- 9. サーバー送信イベント対ポーリング
- 10. TCPハンドシェイク:サーバー送信イベントとWebSocket?
- 11. 3-4秒後にサーバー送信イベントが受信されました
- 12. JavaサーブレットがJSPページにデータを送信
- 13. Forever-frameイベントとサーバー送信イベントの違いは何ですか?
- 14. ファイルを送信するサーバーとクライアントJava
- 15. 別のサーブレットから送信されたサーブレットからデータを取得する
- 16. サーブレットのGET/POSTに送信されたJSP URIの取得
- 17. サーバーはいつも閉鎖されたスプリングmvcでイベントを送信します
- 18. AFNetworkingによるサーバー送信イベント
- 19. サーバー送信イベントがクラッシュするマイ・ブラウザ
- 20. サーバー送信イベントを閉じる方法
- 21. サーバー送信イベントのデータ制限
- 22. javaサーブレット転送クッキー
- 23. サーブレットにシリアル化されたデータを送信するときのjava.io.EOFException
- 24. SMTPサーバーは1つのサーバーでは送信されませんが、別のサーバーで送信されます
- 25. Facebookのイベントにサーバー側のイベントを送信できますか?
- 26. サーバー送信イベントがクライアント切断を検出しましたか?
- 27. サーバーはハイブリッドアプリケーションでイベントを送信しました
- 28. HTTPストリーミングイベントとサーバー送信イベントの違いは何ですか?
- 29. Androidで送信された動画は、Apacheサーバーで受信されません。
- 30. サーバーから送信されたメッセージがクライアント側で受信されない
「サーバー送信イベント」のHTML5機能を探していますか? http://today.java.net/article/2010/03/31/html5-server-push-technologies-part-1 – Robert
はい..イベントはJavaサーブレットを使用して作成する必要があります – Chris
サーブレットは受信HTTPリクエスト。それらは接続を開いたままにするようには設計されていません。あなたはそれを行うことができますが、あなたがそうした場合、あなたのサーバはワーカースレッドから非常に速く実行されると仮定します。 – Robert