Websocket là gì? Websocket là giao thức chuẩn nhằm trao đổi dữ liệu hai chiều giữa client và server phù hợp cho những trường hợp ứng dụng yêu cầu thời gian thực (real time).
Nội dung phần này giúp các bạn tìm hiểu API Java về WebSocket (JSR 356) cung cấp hỗ trợ cho việc tạo các ứng dụng WebSocket. WebSocket là một giao thức nhằm trao đổi dữ liệu hai chiều dựa trên giao thức TCP.
1. Websocket là gì?
Trong mô hình HTTP bạn thấy rằng máy khách sẽ yêu cầu tài nguyên tới máy chủ và máy chủ phản hồi kết quả, như vậy việc trao đổi dữ liệu luôn luôn được máy khách yêu cầu trước và máy chủ không thể gửi bất kỳ dữ liệu tới máy khách trước nếu máy khách chưa yêu cầu.
WebSocket ra đời nhằm giải quyết những hạn chế của bài toán trên bằng cách cung cấp một kênh giao tiếp song song giữa máy khách và máy chủ. Lúc này máy khách và máy chủ có thể trao đổi dữ liệu cho nhau bất cứ lúc nào trong khi kết nối đang mở và cũng có thể đóng kết nối bất cứ lúc nào.
2. Cấu trúc của Websocket
Giao thức WebSocket bao gồm hai phần là bắt tay (handshake) và truyền dữ liệu (data transfer). Máy khách khởi tạo handshake bằng cách gửi một yêu cầu tới WebSocket bằng URI mà máy chủ cung cấp và chờ máy chủ xác nhận. Sau khi quá trình handshake thành công thì lúc này máy khách và máy chủ có thể chủ động trao đổi dữ liệu hai chiều cho nhau.
WebSocket hỗ trợ trao đổi truyền tải dữ liệu dạng văn bản (được mã hóa dưới dạng UTF-8) hoặc nhị phân. Chuẩn giao thức của Websocket là ws:// (chuẩn thông thường) hoặc wss:// (tương tự https://). Ví dụ như sau:
ws://host:port/path?query wss://host:port/path?query
3. Khởi tạo Websocket trong Java
WebSocket cho phép gửi và nhận dữ liệu dạng văn bản và nhị phân.
Gởi thông điệp đến tất cả các máy khách được kết nối như sau:
@ServerEndpoint("/send") 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) { ... } } }
Nhận thông điệp được gởi đến:
@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()); } }
Lời kết: Cám ơn bạn đã theo dõi bài viết tìm hiểu về Websocket là gì? Websocket trong Java. Ngoài ra các bạn có thể xem thêm các nội dung khác trong chuyên mục lập trình Java được chia sẻ với Team Việt Dev.
(Tác giả: Team Việt Dev)