2017-08-10 14 views
0

私は、ドキュメントからスプリングブートを使用して基本的なWebソケットサンプルアプリケーションを作成しました。AndroidからSpringブート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のコールバックのいずれかの応答を得るいけない任意のissues.butせずに成功します。

@MessageMapping("/hello)でマップされたスプリングサーバーのsendResponse()メソッドを呼び出すように、アンドロイドクライアントからメッセージを送信するにはどうすればいいですか。

+0

誰もが閉じないようにしてみてください助けてくださいすることができます! –

答えて

0

、接続にmOkHttpClient.dispatcher().executorService().shutdown();

関連する問題