Por fin luego de tanto batallar hemos dado con la contestación de esta problema que algunos lectores de este espacio han presentado. Si quieres aportar algún detalle puedes compartir tu información.
Solución:
Encontré un gran ejemplo usando javax.websocket
aquí:
http://www.programmingforliving.com/2013/08/jsr-356-java-api-for-websocket-client-api.html
Aquí el código basado en el ejemplo vinculado anteriormente:
TestApp.java
:
package testapp;
import java.net.URI;
import java.net.URISyntaxException;
public class TestApp
public static void main(String[] args)
try
// open websocket
final WebsocketClientEndpoint clientEndPoint = new WebsocketClientEndpoint(new URI("wss://real.okcoin.cn:10440/websocket/okcoinapi"));
// add listener
clientEndPoint.addMessageHandler(new WebsocketClientEndpoint.MessageHandler()
public void handleMessage(String message)
System.out.println(message);
);
// send message to websocket
clientEndPoint.sendMessage("'event':'addChannel','channel':'ok_btccny_ticker'");
// wait 5 seconds for messages from websocket
Thread.sleep(5000);
catch (InterruptedException ex)
System.err.println("InterruptedException exception: " + ex.getMessage());
catch (URISyntaxException ex)
System.err.println("URISyntaxException exception: " + ex.getMessage());
WebsocketClientEndpoint.java
:
package testapp;
import java.net.URI;
import javax.websocket.ClientEndpoint;
import javax.websocket.CloseReason;
import javax.websocket.ContainerProvider;
import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.WebSocketContainer;
/**
* ChatServer Client
*
* @author Jiji_Sasidharan
*/
@ClientEndpoint
public class WebsocketClientEndpoint
Session userSession = null;
private MessageHandler messageHandler;
public WebsocketClientEndpoint(URI endpointURI)
try
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
container.connectToServer(this, endpointURI);
catch (Exception e)
throw new RuntimeException(e);
/**
* Callback hook for Connection open events.
*
* @param userSession the userSession which is opened.
*/
@OnOpen
public void onOpen(Session userSession)
System.out.println("opening websocket");
this.userSession = userSession;
/**
* Callback hook for Connection close events.
*
* @param userSession the userSession which is getting closed.
* @param reason the reason for connection close
*/
@OnClose
public void onClose(Session userSession, CloseReason reason)
System.out.println("closing websocket");
this.userSession = null;
/**
* Callback hook for Message Events. This method will be invoked when a client send a message.
*
* @param message The text message
*/
@OnMessage
public void onMessage(String message)
if (this.messageHandler != null)
this.messageHandler.handleMessage(message);
/**
* register message handler
*
* @param msgHandler
*/
public void addMessageHandler(MessageHandler msgHandler)
this.messageHandler = msgHandler;
/**
* Send a message.
*
* @param message
*/
public void sendMessage(String message)
this.userSession.getAsyncRemote().sendText(message);
/**
* Message handler.
*
* @author Jiji_Sasidharan
*/
public static interface MessageHandler
public void handleMessage(String message);
TooTallNate tiene un lado del cliente simple https://github.com/TooTallNate/Java-WebSocket
Simplemente agregue java_websocket.jar en la carpeta dist en su proyecto.
import org.java_websocket.client.WebSocketClient;
import org.java_websocket.drafts.Draft_10;
import org.java_websocket.handshake.ServerHandshake;
import org.json.JSONException;
import org.json.JSONObject;
WebSocketClient mWs = new WebSocketClient( new URI( "ws://socket.example.com:1234" ), new Draft_10() )
@Override
public void onMessage( String message )
JSONObject obj = new JSONObject(message);
String channel = obj.getString("channel");
@Override
public void onOpen( ServerHandshake handshake )
System.out.println( "opened connection" );
@Override
public void onClose( int code, String reason, boolean remote )
System.out.println( "closed connection" );
@Override
public void onError( Exception ex )
ex.printStackTrace();
;
//open websocket
mWs.connect();
JSONObject obj = new JSONObject();
obj.put("event", "addChannel");
obj.put("channel", "ok_btccny_ticker");
String message = obj.toString();
//send message
mWs.send(message);
// y para cerrar websocket
mWs.close();
Eche un vistazo a estos ejemplos de Java EE 7 de Arun Gupta.
Lo bifurqué en github.
Principal
/**
* @author Arun Gupta
*/
public class Client
final static CountDownLatch messageLatch = new CountDownLatch(1);
public static void main(String[] args)
try
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
String uri = "ws://echo.websocket.org:80/";
System.out.println("Connecting to " + uri);
container.connectToServer(MyClientEndpoint.class, URI.create(uri));
messageLatch.await(100, TimeUnit.SECONDS);
catch (DeploymentException
ClientEndpoint
/**
* @author Arun Gupta
*/
@ClientEndpoint
public class MyClientEndpoint
@OnOpen
public void onOpen(Session session)
System.out.println("Connected to endpoint: " + session.getBasicRemote());
try
String name = "Duke";
System.out.println("Sending message to endpoint: " + name);
session.getBasicRemote().sendText(name);
catch (IOException ex)
Logger.getLogger(MyClientEndpoint.class.getName()).log(Level.SEVERE, null, ex);
@OnMessage
public void processMessage(String message)
System.out.println("Received message in client: " + message);
Client.messageLatch.countDown();
@OnError
public void processError(Throwable t)
t.printStackTrace();
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)