pub-sub を含む多くの Atmosphere の例を見てきました。クライアントがサーバーにもデータを送信することを除いて、pub-sub (クライアントはそのクライアントに固有のチャネルにサブスクライブし、サーバーは定期的にそのチャネルに発行する) のようなことをしたいと考えています。クライアントは、サーバーから送信されたデータに応答してデータを送信します。また、サーバーが知る必要のある重要なことがクライアントで発生した場合 (サーバーが確認する必要がない場合) にも、クライアントはデータを送信します。
Atmosphereでこれを行うことは可能ですか?
次のようになります。
@Stateless
@Path("/id/{clientId}/key/{clientKey}")
public class MyService {
@POST
@Produces("application/xml")
@Consumes("application/xml")
@Suspend
public StreamingOutput subscribe(@PathParam("clientId") String clientId,
@PathParam("clientKey") String clientKey,
@Context Broadcaster broadcaster,
InputStream body) {
if (!authenticate(clientId, clientKey) {
throw new WebApplicationException(401);
}
broadcaster.setID(clientId);
// Do something here... Not sure what
}
}
しかし、ここにはいくつかの問題があります。
- 着信接続は中断されるため、ブロードキャスト経由で再開される場合を除いて、サーバーに何も送信できません。
- を使用する
InputStream
と I/O がブロックされ、Atmosphere を使用する目的が無効になります。
これらの問題はどちらも を削除するだけで解決できます@Suspend
が、接続ごとにスレッドが発生する状況になります。
Atmosphere はここでは適切なテクノロジーではないと感じています。おそらく、もう少し低いレベルのことをしなければならないかもしれません。しかし、どうすればいいのかわかりません。アイデア?
編集:
いずれにせよ、XML を非同期で解析する簡単な方法を見つけることができないため、この全体は、非同期で実行できるものとはあまり似ていないように見えます。