Websocket là gì? Websocket trong Java

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 là gì? Websocket trong Java

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.

Websocket là gì? Websocket trong Java

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

Như vậy ws thể hiện một kết nối WebSocket không được mã hóa và wss thể hiện cho một kết nối được mã hóa. Cổng mặc định là 80 cho các kết nối không được mã hóa và 443 cho các kết nối được mã hóa.

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)

Bình luận