CometD를 사용하는 Java 웹 응용 프로그램이 있습니다. 작업 흐름은 간단합니다.자바 가입자가 소비 할 수있는 CometD Java 클라이언트를 사용하여 메시지 게시
- "/ service/hello"채널에서 메시지를 수신 할 때 작동하는 서비스를 정의했습니다. 이 서비스는 "name"매개 변수를 필요로합니다. 이를 기반으로
"/"+message.getDataAsMap().get("name")
이라는 이름의 채널이 생성됩니다. 이 채널에는 모든 가입자에게 메시지를 다시 전송하는 콜백 메소드가 연결됩니다. - Javascript 클라이언트 (dojo 사용)는 "/ service/hello"채널에 메시지를 게시하고 이름이 인 채널을 "/ service/hello"as 매개 변수에 등록합니다. 예를 취할 수 있습니다 :
.... cometd.subscribe('/1234', function(message) { //do smth on message received; }); cometd.publish('/service/hello', { name: '1234' }); ....
이 잘 작동합니다. 이제 Javascript 클라이언트를 구독자로 만 게시하고 게시를 수행하는 Java 클라이언트를 갖기를 원합니다. Java 클라이언트 API 용 CometD2 설명서에 제공된 예제를 사용하여이 방법을 시도했지만 예상대로 작동하지 않습니다. 서비스가 호출 된 것 같지만 메시지는 Javascript 소비자에게 표시되지 않습니다.
이것을 달성 할 수 있습니까? 무엇이 잘못되었는지에 대한 아이디어가 있습니까? 감사. 여기
서버 측 코드 :공용 클래스의 HelloService는 { 공공의 HelloService (BayeuxServer 바 이외) { 슈퍼 (베 이유, "안녕하세요") AbstractService 확장; addService ("/ service/hello", "processHello"); }
public void processHello(ServerSession remote, Message message) { Map<String, Object> input = message.getDataAsMap(); String name = (String)input.get("name"); String channelId = "/"+name; addService(channelId, "processId"); processId(remote, message); } public void processId(ServerSession remote, Message message) { Map<String, Object> input = message.getDataAsMap(); String name = (String)input.get("name"); int i = 0; Map<String, Object> output = new HashMap<String, Object>(); while(i<1){ i++; output.put("greeting", "Hello, " + name); remote.deliver(getServerSession(), "/"+name, output, null); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
서버 측 코드를 게시 할 수 있습니까? – perissf
서버 쪽 코드를 추가했습니다. 필자의 경우에 맞춰진 cometd 문서 페이지의 것입니다. – mihaela