2012-10-28 3 views
3

나는 각 행에 금융 상품과 실시간 가격을 보여주는 p:dataTable을 가지고 있으며 p:socket, 각 행당 하나의 채널을 사용하여 방송 채널을 설정하려고합니다. 목표는 하나의 계측기에 새로운 가격이 도착하면 더 나은 성능을 얻기 위해 셀만 업데이트 할 수 있다는 것입니다.PrimeFaces Push : 여러 동적 채널 구독

먼저 서버 측에서 동적 채널 구독을 사용하여 showcase's chat example에서 채팅 예제를 복제하려고했지만 클라이언트가 메시지가있는 채널을 가져올 수 없었습니다 (p:socket 여러 채널을 처리 함). ?).

<p:dataTable var="instrument" … > 
    <p:socket onMessage="handleMessage(#{instrument.id})" channel="/price" autoConnect="false" 
             widgetVar="subscriber_#{instrument.id}" /> 
    … 
</p:dataTable> 

및 서버 측에서 :

그럼,이 데이터 테이블에 p:socket를 삽입하여 시도

for (Instrument instrument : instruments) { 
    RequestContext.getCurrentInstance().execute("subscriber_" +instrument.getId() + ".connect('/" + instrument.getId() + "')"); 
} 

그러나 이것은 클라이언트에 오류가 발생합니다 :

ReferenceError: subscriber_123 is not defined 

다른 방법이 있습니까? 클라이언트 또는 서버 측에서 구독 관리에 아무런 문제가 없지만 유일한 중요한 점은 모든 가격을 모든 고객에게 전달하고 싶지 않다는 것입니다. 여기에 동적으로 가입 할 수있는 방법은 여전히 ​​작동 할 수없는 경우

사용 PrimeFaces

답변

0

3.4.1/채널에 연결합니다.

RequestContext.getCurrentInstance().execute("subscriber.connect('/" + instrument.getId() + "')");

당신은 당신의 데이터 테이블에서 여러 <p:socket>을 가질 필요가 없습니다. 단일 소켓으로 모든 pub/sub를 처리 할 수 ​​있습니다.

관련 문제