【发布时间】:2018-02-14 14:09:07
【问题描述】:
实际上,我正在使用文档 https://docs.cometd.org/current/reference/ 中显示的 maven jetty run 在我的本地运行 cometd-demo 服务器,并尝试在 broadcast channel 中订阅和发布某些内容。使用如下所示的 Groovy 脚本,
ClientSessionChannel.MessageListener mylistener = new Mylistener();
def myurl = "http://localhost:8080/cometd/"
MyHttpClient httpClient = new MyHttpClient();
httpClient.start()
Map<String, Object> options = new HashMap<String, Object>();
ClientTransport transport = new LongPollingTransport(options, httpClient);
BayeuxClient client = new BayeuxClient(myurl, transport)
println 'client started on URL : '+ client.getURL()
client.handshake ( new ClientSessionChannel.MessageListener() {
public void onMessage(ClientSessionChannel channel, Message message) {
if (message.isSuccessful()) {
println 'Handshake Message : ' + message
}
}
})
boolean handshakecheck = client.waitFor(1000, BayeuxClient.State.CONNECTED);
println 'Handshake check : '+ handshakecheck
client.batch( new Runnable() {
public void run() {
client.getChannel("/foo/hello").subscribe(
new ClientSessionChannel.MessageListener() {
public void onMessage(ClientSessionChannel channel,
Message message) {
println "subscribed : "+ message
}
})
}
});
程序输出:
client started on URL : http://localhost:8080/cometd/
Handshake Message : [minimumVersion:1.0, clientId:fv0ozxw8cb5e11vtlwpacm7afp, supportedConnectionTypes:[websocket, long-polling, callback-polling], advice:[reconnect:retry, interval:0, maxInterval:10000, timeout:20000], channel:/meta/handshake, id:1, version:1.0, successful:true]
Handshake check : true
在这里我无法获得代码中的subscribed 消息。但在服务器日志中打印如下图,
2018-02-12 20:30:32,687 qtp2069584894-17 [ INFO][examples.CometDDemoServlet] Monitored Subscribe from fv0ozxw8cb5e11vtlwpacm7afp,last=0,expire=0 for /foo/hello
更新 1:
我也无法使用callback 方法订阅,我收到的消息为[channel:/meta/subscribe, id:4, subscription:/foo/hello, error:403:denied_by_not_granting:create_denied, successful:false]。我不知道我做错了什么?我只是按照文档步骤操作。提前致谢。
【问题讨论】:
-
你在哪里发布消息?
-
@BojanPetkovic 在同一频道.. 但在那之前我无法在客户端 onMessage 中获取订阅的消息没关系.. 我说的对吗..?
-
Error : 403. 表示被禁止,可能该主题只能从您的听众无权访问的帐户发布消息。您可能无法在订阅部分收到消息,因为没有发送任何消息。从您的日志中:“last=0”
-
@BojanPetkovic 那么如何正确发布和订阅.. 有点混乱?