私は大気中ランタイム0.6スナップショットを使用しています。 Tomcat 7は、Http11 Nioコネクタを使用していることを正しくログしており、BlockingIOが使用されるという警告は表示されません。大気中ランタイムを使用して単一接続にブロードキャストできません
3種類のチャンネルにメッセージを送信しようとしています。
- グローバルブロードキャスタ - すべての中断されたリソースにブロードキャストします。 (すべての)
- 放送特定のリソース(たとえば、パートナー)に現在のリソースへ
- ブロードキャストするために、私はセッションに格納する必要が何をすべきか、すべての(自己)ログインアクションが発生
、この種の放送を達成する?次のように
私のコードのいくつかの詳細は以下のとおりです。私のハンドラは、コンストラクタでAtmosphereHandler
を実装
- 次のように、私はglobalBroadcasterをインスタンス化:ログインで
globalBroadcaster = new DefaultBroadcaster();
、
resource.getAtmosphereConfig().getServletContext().setAttribute(name, selfBroadcaster);
ここで、nameは要求パラメータのユーザー名で、selfBroadcasterはDefaultBroadcasterの新しいインスタンスです。ここでは私がすべての必要な情報を与えられたと思っている
private synchronized void sendMessageToPartner(Broadcaster selfBroadcaster, AtmosphereResource<HttpServletRequest, HttpServletResponse> resource,String name, String message) {
// this gives the partner's name
String partner= (String) resource.getAtmosphereConfig().getServletContext().getAttribute(name + PARTNER_NAME_TOKEN);
// get partner's broadcaster
Broadcaster outsiderBroadcaster = (Broadcaster) resource
.getAtmosphereConfig().getServletContext()
.getAttribute(partner);
if (outsiderBroadcaster == null) {
sendMessage(selfBroadcaster, "Invalid user " + partner);
return;
}
// broadcast to partner
outsiderBroadcaster.broadcast(" **" + message);
、sendMessageToPartnerためのコードです。必要に応じてさらに情報を提供することができます。
問題は、グローバルメッセージが送信されることです。パートナーへのメッセージが送信されると、ブロックされることもありますが、メッセージはクライアントでまったく受信されません。これは3-4のメッセージの後に一貫して起こります。
スレッドの問題がありますか?私は間違って何をしていますか?
私は誰かがこれで私を助けてくれることを願っています。