如何将android设备连接到Spring websocket服务器
问题描述:
我试图将android设备连接到Spring websocke服务器。 但所有的库给我错误。我在计算机和客户端启动我的Spring websocket服务器是在同一个网络中,所以即时尝试通过计算机的IP进行连接。如何将android设备连接到Spring websocket服务器
这是sevrer性能
@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig
extends AbstractSessionWebSocketMessageBrokerConfigurer<ExpiringSession> {
@Override
protected void configureStompEndpoints(StompEndpointRegistry registry) {
registry.addEndpoint("/anveo-appserver").withSockJS();
}
@Override
public void configureMessageBroker(MessageBrokerRegistry registry) {
registry.enableSimpleBroker("/topic/", "/anveo/");
//registry.enableStompBrokerRelay("/queue/", "/topic/", "/exchange/");
registry.setApplicationDestinationPrefixes("/app");
}
}
这是例如使用我跺脚的客户端。
public class StompWebSocketHandler {
private LoggerHelper logger = LoggerHelper.get(this.getClass());
public void connect() {
StompClient mStompClient;
mStompClient = Stomp.over(WebSocket.class, "ws://172.26.252.197:8443/app/anveo-appserver/websocket");
mStompClient.lifecycle().subscribe(new Action1<LifecycleEvent>() {
@Override
public void call(LifecycleEvent lifecycleEvent) {
switch (lifecycleEvent.getType()) {
case OPENED:
logger.log("Stomp connection opened");
break;
case ERROR:
logger.log("Stomp connection error");
logger.log(lifecycleEvent.getException().toString());
break;
case CLOSED:
logger.log("Stomp connection closed");
break;
}
}
});
mStompClient.connect();
}
}
谁能告诉我什么林做错了什么?
答
根据这一answer
简单的例子(与retrolambda):
添加下面的类路径中的项目:
classpath 'me.tatarka:gradle-retrolambda:3.2.0'
添加下面的东西在你的应用的build.gradle:
apply plugin: 'me.tatarka.retrolambda'
android {
.............
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
............................
compile 'org.java-websocket:Java-WebSocket:1.3.0'
compile 'com.github.NaikSoftware:StompProtocolAndroid:1.1.5'
}
例如:
public class MainActivity extends AppCompatActivity {
private StompClient mStompClient;
public static final String TAG="StompClient";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button view = (Button) findViewById(R.id.button);
view.setOnClickListener(e-> new LongOperation().execute(""));
}
private class LongOperation extends AsyncTask<String, Void, String> {
private StompClient mStompClient;
String TAG="LongOperation";
@Override
protected String doInBackground(String... params) {
mStompClient = Stomp.over(WebSocket.class, "ws://localhost:8080/app/hello/websocket");
mStompClient.connect();
mStompClient.topic("/topic/greetings").subscribe(topicMessage -> {
Log.d(TAG, topicMessage.getPayload());
});
mStompClient.send("/app/hello", "My first STOMP message!").subscribe();
mStompClient.lifecycle().subscribe(lifecycleEvent -> {
switch (lifecycleEvent.getType()) {
case OPENED:
Log.d(TAG, "Stomp connection opened");
break;
case ERROR:
Log.e(TAG, "Error", lifecycleEvent.getException());
break;
case CLOSED:
Log.d(TAG, "Stomp connection closed");
break;
}
});
return "Executed";
}
@Override
protected void onPostExecute(String result) {
}
}
}
添加Internet权限在manifest.xml中
<uses-permission android:name="android.permission.INTERNET" />
不要忘了在你的URL添加 “的WebSocket”。
你刚刚给我从图书馆页面的例子,我看到它,谢谢。 –