java api for websocket 實作介紹

Click here to load reader

Upload: my-own-sweet-home

Post on 17-Dec-2014

1.806 views

Category:

Technology


1 download

DESCRIPTION

Java API for WebSocket

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