класса javax.простой пример клиента websocket
может кто-нибудь, пожалуйста, предоставьте мне очень простой пример клиента websocket с помощью javax.websocket
?
Я хочу подключиться к websocket (ws://socket.example.com:1234), отправить сообщение (добавить канал) и слушать сообщения. Все сообщения (отправленные и прослушанные) находятся в формате JSON.
и кстати, эта библиотека лучше всего подходит для простого общения с websocket?
(извините за глупый вопрос, я изучаю Java, спасибо)
6 ответов:
я нашел отличный пример использования
javax.websocket
здесь:http://www.programmingforliving.com/2013/08/jsr-356-java-api-for-websocket-client-api.html
вот код, основанный на примере, приведенном выше:
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 имеет простую клиентскую сторону https://github.com/TooTallNate/Java-WebSocket
просто добавьте java_websocket.Jar в папке dist вашего проекта.
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);
// и закрыть websocket
mWs.close();
посмотрите на эти примеры Java EE 7 от Arun Gupta.
Я раздвоил его на github.
Main
/** * @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 | InterruptedException | IOException ex) { Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); } } }
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(); } }
https://blog.idrsolutions.com/2013/12/websockets-an-introduction/ это простой пример, у которого есть клиент, который отправит сообщение на сервер, и сервер отправит его обратно
еще несколько: https://www.youtube.com/watch?v=BikL52HYaZg http://www.hascode.com/2013/08/creating-a-chat-application-using-java-ee-7-websockets-and-glassfish-4/
с клиентом "Java", как ОП спросил Websocket и Java Swing передний конец
вот один простой пример.. вы можете скачать и протестировать его http://www.pretechsol.com/2014/12/java-ee-websocket-simple-example.html
используйте эту библиотеку org.java_websocket
Первое, что вы должны импортировать эту библиотеку в строй.gradle
repositories { mavenCentral() }
затем добавьте реализацию в зависимость{}
implementation "org.java-websocket:Java-WebSocket:1.3.0"
затем вы можете использовать этот код
в вашей деятельности объявить объект для Websocketclient, как
private WebSocketClient mWebSocketClient;
затем добавить этот метод для обратного вызова
private void ConnectToWebSocket() { URI uri; try { uri = new URI("ws://your web socket url"); } catch (URISyntaxException e) { e.printStackTrace(); return; } mWebSocketClient = new WebSocketClient(uri) { @Override public void onOpen(ServerHandshake serverHandshake) { Log.i("Websocket", "Opened"); mWebSocketClient.send("Hello from " + Build.MANUFACTURER + " " + Build.MODEL); } @Override public void onMessage(String s) { final String message = s; runOnUiThread(new Runnable() { @Override public void run() { TextView textView = (TextView)findViewById(R.id.edittext_chatbox); textView.setText(textView.getText() + "\n" + message); } }); } @Override public void onClose(int i, String s, boolean b) { Log.i("Websocket", "Closed " + s); } @Override public void onError(Exception e) { Log.i("Websocket", "Error " + e.getMessage()); } }; mWebSocketClient.connect();
}