Top Banner

Click here to load reader

of 25

Java API for WebSocket 實作介紹

Dec 17, 2014

Download

Technology

Java API for WebSocket
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 1. Ph.D 2014/3/121 Java API for WebSocket

2. 2014/3/122 JAVA Server Side: Java Servlet Client Slide: JavaScript for WebScoket 3. 2014/3/123 WebSocket TCP WWWHTTP JSR-356 Java API for WebSocket RFC6455: The WebSocket Protocol Apache Tomcat 8 WebSocketJavaScript API 4. 2014/3/124 WebScoket? HTTP : Line 5. 2014/3/125 WebSocket Application Server: WebSoocket Endpoint URIs Client: endpoint URIs server WebSocket Client ServerClient Client 6. 2014/3/126 WebSocket Handshake: client WebSocket Endpoint URIs HTTP Data trandfer GET /path/to/websocket/endpoint HTTP/1.1 Host: localhost Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: xqBt3ImNzJbYqRINxEFlkg== Origin: http://localhost Sec-WebSocket-Version: 13 HTTP/1.1 101 Switching Protocols Upgrade: websocket Connection: Upgrade Sec-WebSocket-Accept: K7DJLdLooIwIG/MOpvWFB3y3FE8 = 7. 2014/3/127 (UTF-8) Close Ping Pong Ping Ping Pong 8. 2014/3/128 WebSocket Endpoint URIs? ws://host:port/path?query wss://host:port/path?query Port 80443 HTTPS wss 9. JAVA 2014/3/129 Java API for WebSocket (JSR-356) WebSocket endpoints Web WebSocket client API WebSocket endpoints javax.websocket.server server endpoints javax.websocket client server endpoints 10. JAVA 2014/3/1210 WebSocket endpoints javax.websocket.Endpoint JSR-356 endpointsAPI Programmatic endpoints Endpoint Annotated endpoint annotations 11. Server Side: Java Servlet 2014/3/1211 Programmatic endpoints public class EchoEndpoint extends Endpoint { @Override public void onOpen(final Session session, EndpointConfig config) { session.addMessageHandler(new MessageHandler.Whole() @Override public void onMessage(String msg) { try { session.getBasicRemote().sendText(msg); } catch (IOException e) { ... } } }); } } 12. Server Side: Java Servlet 2014/3/1212 session endpoint ServerEndpointConfig.Builder.create(EchoEndpoint.class, "/echo").build(); ws://localhost:8080/echoapp/echo 13. Server Side: Java Servlet 2014/3/1213 Annotated endpoint @ServerEndpoint("/echo") public class EchoEndpoint { @OnMessage public void onMessage(Session session, String msg) { try { session.getBasicRemote().sendText(msg); } catch (IOException e) { ... } } } 14. Server Side: Java Servlet 2014/3/1214 Annotatio n Event OnOpen @OnOpen public void open(Session session, EndpointConfig conf) { } OnMessa ge @OnMessage public void message (Session session, String msg) { } OnError @OnError public void error(Session session, Throwable error) { } OnClose @OnClose public void close(Session session, CloseReason reason) { } 15. Client Slide: JavaScript for WebScoket 2014/3/1215 Session RemoteEndpoint Session.getBasicRemote() RemoteEndpoint.Basic blocking Session.getAsyncRemote() RemoteEndpoint.Async non-blocking 16. Client Slide: JavaScript for WebScoket 2014/3/1216 void RemoteEndpoint.Basic.sendText(String text) void RemoteEndpoint.Basic.sendBinary(ByteBuffer data) Ping void RemoteEndpoint.sendPing(ByteBuffer appData) Pong void RemoteEndpoint.sendPong(ByteBuffer appData) 17. Client Slide: JavaScript for WebScoket 2014/3/1217 session session.getOpenSessions() @ServerEndpoint("/echoall") public class EchoAllEndpoint { @OnMessage public void onMessage(Session session, String msg) { try { for (Session sess : session.getOpenSessions()) { if (sess.isOpen()) sess.getBasicRemote().sendText(msg); } } catch (IOException e) { ... } } } 18. Client Slide: JavaScript for WebScoket 2014/3/1218 @ServerEndpoint("/receive") public class ReceiveEndpoint { @OnMessage public void textMessage(Session session, String msg) { System.out.println("Text message: " + msg); } @OnMessage public void binaryMessage(Session session, ByteBuffer msg) { System.out.println("Binary message: " + msg.toString()); } @OnMessage public void pongMessage(Session session, PongMessage msg) { System.out.println("Pong message: " + msg.getApplicationData().toString()); } } 19. Client Slide: JavaScript for WebScoket 2014/3/1219 client @ServerEndpoint("/delayedecho") public class DelayedEchoEndpoint { @OnOpen public void open(Session session) { session.getUserProperties().put("previousMsg", " "); } @OnMessage public void message(Session session, String msg) { String prev = (String) session.getUserProperties().get("previousMsg"); session.getUserProperties().put("previousMsg", msg); try { session.getBasicRemote().sendText(prev); } catch (IOException e) { ... } } } 20. Client Slide: JavaScript for WebScoket 2014/3/1220 Encoders Decoders Java Object to JSON/XML Path URI @ServerEndpoint("/chatrooms/{room-name}") public class ChatEndpoint { ... } http://localhost:8080/chatapp/chatrooms/currentnews 21. Client Slide: JavaScript for WebScoket 2014/3/1221 @ServerEndpoint("/chatrooms/{room-name}") public class ChatEndpoint { @OnOpen public void open(Session session,EndpointConfig c, @PathParam("room-name") String roomName) { // Add the client to the chat room of their choice ... } } 22. Client Slide: JavaScript for WebScoket 2014/3/1222 @ServerEndpoint("/testendpoint") public class TestEndpoint { ... @OnError public void error(Session session, Throwable t) { t.printStackTrace(); ... } } 23. Client Slide: JavaScript for WebScoket 2014/3/1223 var wsocket = new WebSocket("ws://localhost:8080/dukeetf2/dukeetf"); wsocket.onmessage = onMessage; function onMessage(evt) { var arraypv = evt.data.split(","); document.getElementById("price").innerHTML = arraypv[0]; document.getElementById("volume").innerHTML = arraypv[1]; } wsocket.close(); 24. Client Slide: JavaScript for WebScoket 2014/3/1224 wsocket.onopen = function () { setConnected(true); log('Info: WebSocket connection opened.'); }; wsocket.onmessage = function (event) { log('Received: ' + event.data); }; wsocket.onclose = function () { setConnected(false); log('Info: WebSocket connection closed.'); }; wsocket.onerror = function (er) { setConnected(false); log('Info: WebSocket connection error. + er.data); }; 25. 2014/3/1225 Thanks