CHƯƠNG 5 THIẾT KẾ CHI TIẾT SERVER
5.6. Lớp phiên làm việc Session
Do tất cả các bài toán của User sẽ được gửi đến Server, rồi sau đó Server sẽ phân phối bài toán đó đến tất cả các Solver đang kết nối đến Server. Chính vì vậy hệ thống sẽ nảy sinh ra trường hợp, nếu như 2 bài toán cùng được gửi đến Server hay trả về kết quả cùng một lúc, khi ấy các dòng dữ liệu được gửi từ Solver đến Server hay ngược lại, làm sao phân biệt dòng dữ liệu đó là của bài toán nào? Để xử lý chuyện đó, ta có thể tạo lại một kết nối khác qua cổng khác đến Solver ứng với mỗi bài toán. Nhưng nếu làm như vậy thì sẽ có những nhược điểm là chi phí để tạo một kết nối khác là rất lớn, chậm và tốn tài nguyên, nhưng sẽ dễ dàng hơn khi lập trình. Điều này sẽ vi phạm yêu cầu của bài toán là đòi hỏi trả về kết quả nhanh. Do vậy ta có thể sử dụng một cách như sau:
+ Trước mỗi dòng gửi từ Server đến Solver hoặc ngược lại ta cộng thêm ở đầu chuỗi một đoạn là ‘session_id|’.
+ Trong khoảng từ thẻ mở và thẻ đóng tương ứng với session_id đó, tất cả các dòng mà có session_id đằng trước thì ta thêm vào nội dung thực sự của session_id đấy.
Do vậy ta thiết kế một lớp Session gồm:
+ Biến session_id thể hiện mã session_id. + Trạng thái hoạt động của session đó.
+ Chuỗi thể hiện nội dung của session đó (Hình 5.10).
public class Sesstion { // session_id
protected int session_id = 0; // Noi dung ket qua
protected String content = ""; // Trang thai hoat dong
protected boolean active = false; // Khoi tao
public Sesstion(){ }
// Gan trang thai hoat dong
public void SetActive(boolean status){ this.active = status;
// Gan noi dung ket qua
public void SetContent(String tmp){ this.content = tmp;
}
// Gan session_id
public void SetSessionID(int id){ this.session_id = id;
} }
Hình 5.10 Các phương thức, thuộc tính của lớp Session.
Với việc sử dụng lớp Session này, việc làm việc và xử lý giải quyết nhiều bài toán cùng một lúc của hệ thống trở nên dễ dàng hơn rất nhiều.