[Java] Adding SSE support in Java EE 8

原文はこちら。
https://blogs.oracle.com/theaquarium/entry/sse_in_java_ee_8

SSE (Server-Sent Event) はHTTPを使ってクライアントへサーバーからの通知をするための標準のメカニズムです。
High Performance Browser Networking
Chapter 16. Server-Sent Events (SSE)
http://chimera.labs.oreilly.com/books/1230000000545/ch16.html
SSEはWebSocketとよく比較されることがあります。共にHTML5をサポートしておりサーバーに対しクライアントへ通知する手段を提供しているためなのですが、両者は異なるものです。SSE、WebSocketの長所・短所は以下のリンクをご覧下さい。
WebSockets vs. Server-Sent events/EventSource (stackoverflow.comより)
http://stackoverflow.com/questions/5195452/websockets-vs-server-sent-events-eventsource/5326159#5326159
SSEは一方向のPublish-Subscribeモデルのための効果的なソリューションを提供しているため、RESTクライアントにとってきわめて補完的なものです。つまり、RESTクライアントは「購読」でき、SSEベースの通知をRESTエンドポイントから取得することができます。実際のところ、Jersey(JAX-RSの参照実装)はずいぶん前からSSEをサポートしています(詳細はJerseyのドキュメントをご覧下さい)。
Jersey 2.9 User Guide - Chapter 14. Server-Sent Events (SSE) Support
https://jersey.java.net/documentation/latest/sse.html
SSEを直接Servlet APIから使いたいと思うケースもあるかと思います。SSE通知をServlet APIで送信するのは比較的簡単です。以下のリンクに、Servlet 3.1 APIベースのSSEのサンプルが2個ありますのでご覧下さい。
Server-Sent Events with Async Servlet By Example (Shing Wai Chan)
https://weblogs.java.net/blog/swchan2/archive/2014/05/21/server-sent-events-async-servlet-example
現在Java EE 8でのSSEのサポートを追加することを検討していますが、ここで質問があります。SSEのサポートを追加するにあたり、どのプラットフォームに追加すべきか、ということです。
  • Servlet API
  • WebSocket API
  • JAX-RS
  • 専用のSSE APIを用意する(つまり専用のJSRも)
[javaee-spec users] [jsr342-experts] Server-Sent Events in Java EE 8
https://java.net/projects/javaee-spec/lists/users/archive/2014-05/message/10
Santiago Pericas-Geertsen (JAX-RSの共同スペックリード)がその質問に関連する初期調査を実施しました。様々な選択肢への賛成意見やSantiagoの調査結果は以下のリンクからご覧戴けます。
Server-Sent Events (SSE) in Java EE 8
https://java.net/downloads/javaee-spec/SSE-in-EE8.pdf
現段階では、Java EEでSSEをサポートする上ではJAX-RSが良い選択肢のように思われます。この件は当然それぞれのJCP Expert Group内で議論されますが、あなたはどう思われますか?

0 件のコメント:

コメントを投稿