jfarcand/async-http-client — Issue #1: Websocket ne recoit pas les messages
Author: survivant
Created: 2011-12-08 18:52:57+00:00
State: open

Voici un usecase que je fais et que je ne recois jamais de messages.

AHC : Grizzly et serveur Jetty 8.0.4

public static AsyncHttpClient getAsyncHttpClient(AsyncHttpClientConfig config) {
if (config == null) {
config = new AsyncHttpClientConfig.Builder().build();
}
return new AsyncHttpClient(new GrizzlyAsyncHttpProvider(config), config);
}

....

// on ouvre une connection en WebSocket
WebSocket websocket1 = c.prepareGet("ws://localhost:8080/socketiochat/ChatAtmosphereHandler/1/websocket/" + sessionidWS1).execute(new WebSocketUpgradeHandler()).get();
websocket1.addMessageListener(new WebSocketListener() {

@Override
public void onMessage(byte[] message) {
System.err.println("WS onMessage = " + new String(message));
}

@Override
public void onClose() {
System.err.println("WS onClose");
}

@Override
public void onError(Throwable t) {
t.printStackTrace();
}
});

// on ouvre une connection en WebSocket
WebSocket websocket2 = c.prepareGet("ws://localhost:8080/socketiochat/ChatAtmosphereHandler/1/websocket/" + sessionidWS2).execute(new WebSocketUpgradeHandler()).get();
websocket2.addMessageListener(new WebSocketListener() {

@Override
public void onMessage(byte[] message) {
System.err.println("WS onMessage = " + new String(message));
}

@Override
public void onClose() {
System.err.println("WS onClose");
}

@Override
public void onError(Throwable t) {
t.printStackTrace();
}
});

// on fait un connect, donc la connection en long-polling va recevoir un message
websocket1.sendMessage("5:1+::{\"name\":\"nickname\",\"args\":[\"test\"]}".getBytes());

Dans le serveur.. je vois dans mes logs que le messages a bien été envoyés sur le websocket.

Dans Atmosphere j'ai ceci :

logger.error("calling from " + this.getClass().getName() + " : " + "sendMessage(string) = " + message);

if(webSocket!=null){
try {
webSocket.write(message);
logger.error("WRITE SUCCESS : calling from " + this.getClass().getName() + " : " + "sendMessage(string) = " + message);
} catch (IOException e) {
e.printStackTrace();
}
} else {
logger.warn("WebSOCKET NULL");
}

et dans mes logs :

131833 [pool-4-thread-1] ERROR org.atmosphere.protocol.socketio.protocol1.transport.WebSocketTransport - calling from org.atmosphere.protocol.socketio.protocol1.transport.WebSocketTransport$SessionWrapperImpl : sendMessage(string) = 2::
131833 [pool-4-thread-1] ERROR org.atmosphere.protocol.socketio.protocol1.transport.WebSocketTransport - WRITE SUCCESS : calling from org.atmosphere.protocol.socketio.protocol1.transport.WebSocketTransport$SessionWrapperImpl : sendMessage(string) = 2::

tout ce que je vois dans les logs de mon test WebSocket c'est :

OnClose
OnClose

quand je close ahc client