2017-08-10 131 views
0

我已经创建了一个基本的websockets示例应用程序,从他们的文档中使用spring启动。向Spring Boot发送消息从Android的websocket端点方法

这是在春季启动我的插座的conf:

@Configuration 
@EnableWebSocketMessageBroker 
public class WebSocketConfig extends 
AbstractWebSocketMessageBrokerConfigurer { 

@Override 
public void configureMessageBroker(MessageBrokerRegistry registry) { 
    registry.enableSimpleBroker("/topic"); 
    registry.setApplicationDestinationPrefixes("/app"); 
} 

@Override 
public void registerStompEndpoints(StompEndpointRegistry 
stompEndpointRegistry) { 

stompEndpointRegistry.addEndpoint("/message").setAllowedOrigins("*"); 
} 
} 

,这是我的消息控制器

@Controller 
public class MessageController { 

private static final Logger logger = 
LoggerFactory.getLogger(MessageController.class); 

@MessageMapping("/hello") 
@SendTo("/topic/greetings") 
public Greeting sendResponse(Message incomingMessage) { 
    logger.debug(incomingMessage.getMessage()); 
    return new Greeting("Hello " + incomingMessage.getMessage()); 
} 
} 

我用okhttp从机器人到使用以下代码连接到套接字:

public class MainActivity extends AppCompatActivity { 

private ActivityMainBinding mBinding; 
private static String TAG; 
public static final String SOCKET_ADDR = 
"wss://androidspy.herokuapp.com/message"; 
private OkHttpClient mOkHttpClient; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
mBinding = DataBindingUtil.setContentView(this, 
R.layout.activity_main); 

TAG = this.getClass().getSimpleName(); 
initObjects(); 
initListeners(); 
initiateHandshake(); 
} 

private void initObjects() { 
mOkHttpClient = new OkHttpClient(); 
} 

private void initListeners() { 
//mBinding.btnConnect.setOnClickListener(this::initiateHandshake); 
} 

private void initiateHandshake() { 
Request socketRequest = new Request.Builder() 
    .url(SOCKET_ADDR) 
    .build(); 

WebSocket webSocket = mOkHttpClient.newWebSocket(socketRequest, new 
WebSocketListener() { 
    @Override 
    public void onOpen(WebSocket webSocket, Response response) { 
    webSocket.send("Hi Server"); 
    Log.d(TAG, String.format("Connected to 
%s",webSocket.request().url())); 
    } 

    @Override 
    public void onMessage(WebSocket webSocket, String result) { 
    Log.d(TAG, String.format("Received %s" ,result)); 
    } 
}); 
mOkHttpClient.dispatcher().executorService().shutdown(); 
} 

与上面的代码,连接成功获得没有任何问题。但我没有得到的onMessage回调任何回应。

我想知道如何从android客户端发送消息,以便它在与@MessageMapping("/hello)映射的春季服务器中调用sendResponse()方法。

+0

任何人,请大家帮忙!! –

回答

0

尽量不要关闭连接mOkHttpClient.dispatcher().executorService().shutdown();