雰囲気を利用して通知システムを開発したい。
私はAtmosphereにとても慣れていないので、どこかで間違っていたらお詫びします。私が理解したのは、アクターが何かを公開したときに、通知アクションをデータベースに保存することです。受信者がこれらの通知をリアルタイムで受信する方法がわかりません。
私が知っている送信者は次のようなことをします
event.getBroadcaster().broadcast(
objectMapper.writeValueAsString("Some Message"));
今、私は受信者がこのメッセージをどのように受信できるかを理解することができません。
例えば 。ユーザーオブジェクトをフレンドとして追加したい。したがって、User1がUser2 User1ブロードキャストを追加するとき、ただし、通知をUser2にプッシュする方法よりも。私はこれを理解するのが難しいです。
技術的には、FacebookやGmailの通知のように、ユーザーアクティビティで他のユーザーが通知を受け取るようなものが必要です。
基本的に必要なのは、Atmosphereの上に Publish-subscribe を実装することです。
Atmosphereは、クライアント側(javascriptベース)とサーバー側(Javaベース)の2つの部分で構成されています。
まず、サーバー側を構成する必要があります: Atmosphereのインストール
つまり、サーブレットまたはフィルタの場合、HttpServletRequestに AtmosphereResource を追加できるようにする必要があります。
AtmosphereResource は、サーバー側の単一のクライアント接続を表します。
Broadcasterは実際にはこれらのリソースのコンテナーであるため、複数の接続に送信する必要がある場合にルックアップ/反復/同時実行を処理する必要はありません。 (単一のクライアントで複数の接続を生成できることに注意してください)。
サーバー側では、通知をサブスクライブするエンドポイントをクライアントに提供する必要があります。たとえば、Spring-MVCを使用している場合は、次のようになります(検証/認証の省略など)。
@RequestMapping(value = "/user-notifications/{userId}")
@ResponseStatus(HttpStatus.OK)
@ResponseBody
public void watch(@PathVariable("userId") String userId,
HttpServletRequest request) throws Exception {
//Atmosphere framework puts filter/servlet that adds ATMOSPHERE_RESOURCE to all requests
AtmosphereResource resource = (AtmosphereResource)request.getAttribute(ApplicationConfig.ATMOSPHERE_RESOURCE);
//suspending resource to keep connection
resource.suspend();
//find broadcaster, second parameter says to create broadcaster if it doesn't exist
Broadcaster broadcaster = BroadcasterFactory.getDefault().lookup(userId,true);
//saving resource for notifications
broadcaster.addAtmosphereResource(resource);
}
何かが起こったとき、あなたはこのようにクライアントに通知することができます:
public void notify(User user, Event event){
Broadcaster b = BroadcasterFactory.getDefault().lookup(user.getId());
if (b!=null){
b.broadcast(event);
}
}
クライアント側では、サブスクライブ要求を送信し、次のような後続のイベントをリッスンする必要があります。
var request = new atmosphere.AtmosphereRequest();
request.url = '/user-notifications/'+userId;
request.transport = 'websocket';
request.fallbackTransport = 'streaming';
request.contentType = 'application/json';
request.reconnectInterval = 60000;
request.maxReconnectOnClose = 1000;
request.onMessage = function(response){
console.log(response);
alert('something happend<br>'+response);
};
that.watcherSocket = atmosphere.subscribe(request);
それで、それを要約すると:
このwiki Atmosphereの背後にあるいくつかの概念の説明と、他のドキュメントへのリンクがあります。
AtmosphereはWebSocketをサポートしています。 Javaクライアントを作成したい場合は、試してみてください https://github.com/TooTallNate/Java-WebSocket
独自のWebSocketクライアントの作成のセクションを参照してください