대기 런타임 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);
문제는 글로벌 메시지가 전송된다는 것입니다. 파트너에게 보내는 메시지가 전송 될 때 가끔 차단되고 메시지가 클라이언트에서 전혀 수신되지 않습니다. 이것은 3-4 개의 메시지 이후에 일관되게 발생합니다.
스레딩 문제가 있습니까? 내가 도대체 뭘 잘못하고있는 겁니까?
누군가가 나를 도와 주길 바랍니다.