我的回答是基于这个问题中的 cmets。没有关于该问题的足够信息,因此我正在为您的问题编写 2 个解决方案
解决方案 1 - 不使用 Stomp 实现 - 简单的 websocket
这是一个简单的 Websocket 实现。为此,您可以使用 koush/AndroidAsync 库
将此项目实施到您的项目中
dependencies {
compile 'com.koushikdutta.async:androidasync:2.+'
}
然后连接到 Websocket 服务器
String url="ws://172.17.1.54:8000/";
AsyncHttpClient.getDefaultInstance().websocket(url, "my-protocol", new WebSocketConnectCallback() {
@Override
public void onCompleted(Exception ex, WebSocket webSocket) {
if (ex != null) {
ex.printStackTrace();
return;
}
webSocket.setStringCallback(new StringCallback() {
public void onStringAvailable(String s) {
System.out.println("I got a string: " + s);
}
});
webSocket.setDataCallback(new DataCallback() {
public void onDataAvailable(DataEmitter emitter, ByteBufferList byteBufferList) {
System.out.println("I got some bytes!");
// note that this data has been read
byteBufferList.recycle();
}
});
}
});
这里 setStringCallback() 和 setDataCallback() 将收到您的实时更新。
您也可以为此使用codebutler/android-websockets 库。
解决方案 2:使用 Stomp 实现
为此,您可以使用Gozirra java 库来解决此问题。
您可以download 客户端库。然后将其放入您的 libs 文件夹中。
用于连接到您的服务器
Client c = new Client("server url", port, "login", "password");
为更新创建一个监听器
Listener listener=new Listener() {
@Override
public void message(Map map, String s) {
//Do your stuff
}
};
然后订阅您的主题消息
c.subscribe("foo-channel", listener);
如果您想退订,可以使用以下代码
c.unsubscribe("foo-channel", listener); // Unsubscribe only one listener
或
c.unsubscribe("foo-channel"); // Unsubscribe all listeners
用于断开客户端
c.disconnect();
我没有用真正的服务器对此进行测试。但我认为这会起作用。如果它解决了您的问题,请告诉我
解决方案 3
正如你提到的图书馆https://github.com/NaikSoftware/StompProtocolAndroid
你可以使用这个。简化版如下
将 maven 链接添加到您的项目级 gradle 中
repositories {
maven { url "https://jitpack.io" }
}
在你的模块级 gradle 中添加依赖
implementation 'com.github.NaikSoftware:StompProtocolAndroid:1.1.5'
implementation 'org.java-websocket:Java-WebSocket:1.3.0'
然后使用以下代码获取消息
StompClient mStompClient = Stomp.over(WebSocket.class, "ws://10.0.2.2:5000/");
mStompClient.topic("/topic/general").subscribe(new Action1<StompMessage>() {
@Override
public void call(StompMessage stompMessage) {
Log.e(TAG, stompMessage.getPayload());
}
});
mStompClient.lifecycle().subscribe(new Action1<LifecycleEvent>() {
@Override
public void call(LifecycleEvent lifecycleEvent) {
switch (lifecycleEvent.getType()) {
case OPENED:
Log.e(TAG, "Stomp connection opened");
break;
case ERROR:
Log.e(TAG, "Error", lifecycleEvent.getException());
break;
case CLOSED:
Log.e(TAG, "Stomp connection closed");
break;
}
}
});
mStompClient.connect();