gpt4 book ai didi

ios - StompClientLib - 取消订阅 socketclient

转载 作者:可可西里 更新时间:2023-10-31 23:56:12 26 4
gpt4 key购买 nike

我添加了 StompClientLib在我的项目中,我在取消订阅目标主题时遇到问题。

Unsubscription of destination gives following error: "org.apache.activemq.transport.stomp.ProtocolException: No subscription matched.\r\tat org.apache.activemq.transport.stomp.ProtocolConverter.onStompUnsubscribe(ProtocolConverter.java:734)\r\tat org.apache.activemq.transport.stomp.ProtocolConverter.onStompCommand(ProtocolConverter.java:262)\r\tat org.apache.activemq.transport.ws.AbstractStompSocket.processStompFrame(AbstractStompSocket.java:151)\r\tat org.apache.activemq.transport.ws.jetty9.StompSocket.onWebSocketText(StompSocket.java:96)\r\tat org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextMessage(JettyListenerEventDriver.java:128)\r\tat org.eclipse.jetty.websocket.common.message.SimpleTextMessage.messageComplete(SimpleTextMessage.java:69)\r\tat org.eclipse.jetty.websocket.common.events.AbstractEventDriver.appendMessage(AbstractEventDriver.java:64)\r\tat org.eclipse.jetty.websocket.common.events.JettyListenerEventDriver.onTextFrame(JettyListenerEventDriver.java:122)\r\tat org.eclipse.jetty.websocket.common.events.AbstractEventDriver.incomingFrame(AbstractEventDriver.java:160)\r\tat org.eclipse.jetty.websocket.common.WebSocketSession.incomingFrame(WebSocketSession.java:309)\r\tat org.eclipse.jetty.websocket.common.extensions.ExtensionStack.incomingFrame(ExtensionStack.java:214)\r\tat org.eclipse.jetty.websocket.common.Parser.notifyFrame(Parser.java:220)\r\tat org.eclipse.jetty.websocket.common.Parser.parse(Parser.java:258)\r\tat org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.readParse(AbstractWebSocketConnection.java:628)\r\tat org.eclipse.jetty.websocket.common.io.AbstractWebSocketConnection.onFillable(AbstractWebSocketConnection.java:476)\r\tat org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540)\r\tat org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)\r\tat org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)\r\tat java.lang.Thread.run(Unknown Source)\r")

是的,这是订阅名称的问题,但它不接受我用于订阅特定 channel 的相同字符串。

例如:

```
// destination
let destinationChannelTopic = "/topic/channel_1234"

// subscribe successful
socketClient?.subscribe(destination: destinationChannelTopic)

// unsubscribe not successful with same destination
socketClient?.unsubscribe(destination: destinationChannelTopic)
```

这里取消订阅回复我一个错误:没有匹配的订阅
任何人都可以帮助我理解,有什么问题吗?我做错了什么?

正如我从 Subscribe and receive messages 分析的那样,订阅(订阅方法)从服务器返回一个字符串(订阅 channel ID),我们需要将其存储在客户端的某个地方(在我们的项目/代码中),我们需要使用相同的字符串来取消订阅。

这是 javcScript(不是 iOS - swift)代码,此链接 (Subscribe and receive messages) 中提供的示例,我们在 Web 应用程序中实现了类似的方式:

```
// subscribe
var subscription = client.subscribe("/queue/test", callback);
```

The subscribe() methods return a JavaScript object with 1 attribute, id, that correspond to the client subscription ID and one method unsubscribe() that can be used later on to unsubscribe the client from this destination.

```
// unsubscribe
subscription.unsubscribe();
```

那么,这是否只是订阅和取消订阅的方法/可能方式。如果是,那么我们没有任何返回到 subscribe(...) 的值可以用来取消订阅。我没有从订阅 socketClient?.subscribe(destination: destinationChannelTopic) 方法中获得任何值(目标订阅 ID)

作为此问题的替代解决方案,我断开客户端与服务器的连接并再次重新连接 + 再次订阅所有其他目的地。这不是一个正确的处理方式,但我目前只有这个解决方案。

请帮忙找出解决这个问题的方法。

这里是关于这个问题的引用链接:unsubscribe socketclient #14

最佳答案

订阅和取消订阅的订阅方法非常不同。

订阅使用唯一目的地 (id) 连接服务器作为目的地,但通过引用订阅 ID 链接并记住它,并使用订阅 ID 在服务器上标识自己,同时取消订阅。

这是您正在寻找的代码。试试吧。

let destination = "/topic/channel_1234"
let ack = "ack_\(destination)" // It can be any unique string
let subsId = "subscription_\(destination)" // It can be any unique string
let header = ["destination": destination, "ack": ack, "id": subsId]

// subscribe
socketClient?.subscribeWithHeader(destination: destination, withHeader: header)

// unsubscribe
socketClient?.unsubscribe(destination: subsId)

关于ios - StompClientLib - 取消订阅 socketclient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48472473/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com