java - 如何使用okhttp3 Websocket调用spring boot MessageMapping
问题描述
我已经创建了一个 Spring Boot Messaging 端点,需要创建一个 android 聊天应用程序,我想知道如何使用 okttp Websocket 客户端来调用这些端点,而 okttp Websocket 客户端似乎没有办法像这个 javascript 代码一样添加 api 端点。
这是我的春季启动端点
@Configuration
@EnableWebSocketMessageBroker
public class WebMessageConfig implements WebSocketMessageBrokerConfigurer {
@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
config.enableSimpleBroker( "/user");
config.setApplicationDestinationPrefixes("/app");
config.setUserDestinationPrefix("/user");
}
@Override
public void registerStompEndpoints(StompEndpointRegistry registry) {
registry
.addEndpoint("/ws")
.withSockJS()
.setAllowedOrigins("*");
}
}
这是我的 OkHttp 客户端代码
公共类 StompWs {
private String SERVER_PATH="ws://mydomain.com:8443/MyContex/ws";
public static void main(String[] args) {
try {
new StompWs().run();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private WebSocket webSocket;
public void run() throws Exception {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(SERVER_PATH).build();
webSocket = client.newWebSocket(request, new SocketListener());
}
private String getData()
{
MessageModel message=new MessageModel();
message.setMessage("Hello");
message.setRecipientId("1");
message.setSenderId("2");
return new Gson().toJson(message);
}
private class SocketListener extends WebSocketListener {
@Override
public void onOpen(WebSocket webSocket, Response response) {
super.onOpen(webSocket, response);
try {
webSocket.send(getData());
/**I need equivalent of this
stompClient.subscribe(
"/user/1/queue/messages",// I need java code to do this
onMessageReceived
*/
}
catch(Exception e)
{
e.printStackTrace();
}
System.out.println("succesfully connected:"+response.toString());//this message execute well
}
@Override
public void onMessage(WebSocket webSocket, String text) {
super.onMessage(webSocket, text);
System.out.println("on message:"+text);
}
@Override
public void onFailure(WebSocket webSocket, Throwable t,
Response response) {
// TODO Auto-generated method stub
super.onFailure(webSocket, t, response);
System.out.println("on message:"+t.toString());
}
}
}
解决方案
推荐阅读
- angular - 如何在Angular中单击按钮时检查单选按钮?
- visual-studio - 无法满足导入“Microsoft.WebTools.Scaffolding.Core.ScaffolderFactory.FactoryConfigEvaluator”
- ilias - ILIAS LMS v6.1:使用 php 7.4 和 MySQL 8 在设置脚本中无法通过 DB 选择
- sql-server - SSIS 包中的 OData 源到 SQL Server 2012 问题
- amazon-web-services - 来自“单点登录”的 AWS 凭证过于频繁地过期 - 如何获得使用寿命更长的凭证?
- c# - 我如何使用日期时间运算符?
- firebase - SwiftUI 和 Firestore - 启动时从不同集合中读取多个文档的逻辑
- elasticsearch - 新集群中的重新索引数据应使用最新的时间戳更新
- ios - 将 VNFeaturePrintObservation 持久化到核心数据
- sql-server - 以 YYYYMM 格式获取一年前的日期