cometd angularjs 서비스를 작성하려고합니다. 콜백을 트리거해야하는 cometd 메시지가 발생하면 콜백이 호출되지 않습니다.AngularJS 서비스에서 Cometd 리스너 콜백이 트리거되지 않음
cometd 서버에 연결하여 'subscribe', 'unsubscribe', 'send', 'listen', 'removeListener'및 'leave'기능을 노출하는 코드를 수집합니다. 'subscribe', 'unsubscribe', 'listen'및 'removeListener'에서 구독 및 청취자를 서비스에 기록하여 연결이 끊어진 경우 다시 만들 수 있습니다. 여기의 removeListener '을'듣고 '과의 코드입니다 :
var listeners = {}; //Each property, named 'channel', contains an array
//containing listener, channel, callback
listen: function(channel, callBack) {
console.log("add listener for " + channel + " called");
var lis = cometd.addListener(channel, callBack);
listeners[channel] = [lis, channel, callBack];
return lis;
},
removeListener: function(lis) {
var lis = false;
lis = listeners[channel][0];
delete listeners[channel];
if(lis) {
cometd.removeListener(lis);
}
},
컨트롤러에서, 나는 내 cometdService을 포함하고 서비스 채널들을 수 있습니다. 내 콜백 함수는 다음과 같습니다
CometdService.listen("/service/messages", function(msg) {
console.log("CometdService for /service/messages with msg.data: " + msg.data);
$scope.messages.append(msg.data);
});
희망이 클라이언트의/서비스/메시지 채널에 전송 된 메시지는 내 템플릿의 사업부 인 $ scope.messages에 추가됩니다되고있다.
그러나 결코 발생하지 않습니다. 나는 cometd 서버에 만들어지고 연결을 볼 수있다, 나는 콜백이 등록되는 것을 볼 수 있습니다
add listener for /service/messages called CometdService.js:129:6
09:37:55.737 Adding listener on /service/messages with scope undefined and callback function LoggedInCtrl/listener<() cometd.js:1275:17
09:37:55.738 Added listener Object { channel: "/service/messages", scope: undefined, callback: LoggedInCtrl/listener<(), listener: true, id: 0 } cometd.js:1275:17
는 거의 즉시, 내가 삭제되는 리스너을 본 후 다시 추가 :
09:37:56.229 Removed listener Object { 0: "/service/messages", 1: 0, channel: "/service/messages", scope: undefined, callback: LoggedInCtrl/listener<(), listener: true, id: 0 } cometd.js:1275:17
09:37:56.231 Adding listener on /service/messages with scope undefined and callback function LoggedInCtrl/listener<() cometd.js:1275:17
09:37:56.232 Added listener Object { channel: "/service/messages", scope: undefined, callback: LoggedInCtrl/listener<(), listener: true, id: 1 } cometd.js:1275:17
그때 참조 서버로부터의 메시지가 수신되고 있습니다 :
09:37:56.310 Transport websocket received websocket message message { target: WebSocket, isTrusted: true, data: "[{"data":"{\"msg\":\"Hello\"}","channel":"/server/messages"}]", origin: "ws://localhost:8080", lastEventId: "", ports: Object, currentTarget: WebSocket, eventPhase: 2, bubbles: false, cancelable: false, defaultPrevented: false } Object { envelopes: Object[3], timeouts: Object[3], webSocket: WebSocket }
그러나 콜백이 호출되는 것을 본 적이 없습니다.
도움을 주시면 감사하겠습니다.
'cometd.configure()'부분을 추가하십시오. – lin
어떤 종류의 객체가'$ scope.messages'입니까? 'append' 메소드는 어디에 정의되어 있습니까? – georgeawg