Lớp tiếp nhận các kết nối ServerSMT

Một phần của tài liệu xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ (Trang 28 - 31)

CHƯƠNG 5 THIẾT KẾ CHI TIẾT SERVER

5.2.Lớp tiếp nhận các kết nối ServerSMT

ServerSMT đón nhận các kết nối từ User, Solver và chuyển bài toán từ User đến Solver và chuyển ngược kết quả từ Solver đến User.

Phương thức getSessionId(): Sinh ra một mã session để sử dụng trong qua trình giao tiếp giữa Server và Solver để phân biệt dữ liệu của các bài toán khác nhau.

Phương thức killSession(int session_id): Để hủy các tiến trình liên quan đến session có mã là session_id của các Solver sau khi đã nhận được kết quả đầu tiên từ một Server, Server sẽ gọi đến phương thức hủy Session với tham số là session_id được truyền vào tới tất cả các Solver kết nối đến nó (Hình 5.2).

public void killSession( int session_id){ for (int i = 0; i< this.numSolver; i++){ Solver[i].killSesstionProcess(session_id); }

}

Hình 5.2 Phương thức killSession của lớp ServerSMT.

Phương thức returnResultToRequestThread(int sesstion_id, String Res, String

Solvername): Khi có kết quả nhận về từ Solver, nội dung kết quả sẽ được chuyển đến

hàm returnResult của đối tượng RequestThread rt của lớp này để chuyển kết quả về đúng người dùng gửi bài toán đến hệ thống.

Server quy định cổng giao tiếp giữa người dùng với ServerSMT và cổng giao tiếp giữa ServerSMT với Solver là 2 cổng khác nhau qua 2 biến port – cho Server – người dùng và SolverPort cho Solver – Server.

Số luồng (tiến trình) xử lý tối đa của Server được quy định bởi biến maxThread, đây cũng chính là số lượng tối đa User được phục vụ một lúc.

Số người dùng kết nối tối đa đến hệ thống chính bằng độ dài lớn nhất của hàng đợi request. Khi số lượng kết nối đến hệ thống vượt qua số lượng kết nối tối đa do hệ thống quy định thì các kết nối chưa được nhận sẽ được đẩy vào backlog chờ hệ thống rảnh để kết nối.

Đầu tiên, ServerSMT sẽ lắng nghe các kết nối từ Solver đến Server, trong khi kết nối được thiết lập sẽ có màn chào hỏi giữa Solver và Server để Server có thể nắm bắt được các thông tin của Solver đó. Chẳng hạn khi Server đọc được thông tin từ Solver gửi đến như hình 5.3.

<hello> Z3 </hello>

Hình 5.3 Ví dụ về việc chào hỏi giữa User và Server.

Server sẽ hiểu được Solver Z3 đã kết nối đến Server, tạo một đối tượng SolverHandler cho Solver đó vào danh sách các Solver. Đưa ra thông báo có 1 Solver đã kết nối đến và tên của nó. Sau đó, tiếp tục chờ các Solver khác kết nối đến. Khi số lượng Solver kết nối đến đầy đủ, Server sẽ không tiếp nhận Solver nữa (Hình 5.4).

int count = 0;

while (count < numSolver){ try{

Debug.print("waiting for Solvers..." + (numSolver - count) + " Solver(s) remaining."); // Cho 1 ket noi den

Socket s = SolverServerSocket.accept(); // Lay thong tin ve cua may ket noi den InetAddress addr = s.getInetAddress();

Debug.print(" Nhan ket noi tu : " + addr.getHostAddress() + " : " + addr.getHostName()); // Tao mot Solver handler tu socket do

Solver[count] = new SolverHandler(s, this);

// Bat dau chay SolverHandler va tang bien dem so Solver len Solver[count].start();

count++; }

catch (Exception ex){ ex.printStackTrace(); }

}

Hình 5.4 Tiếp nhận các Solver.

Server lắng nghe các kết nối đến từ User, khi có một kết nối đến cổng dành cho User, Server sẽ đưa socket đó vào hàng đợi để làm việc với người dùng đó (Hình 5.5).

while (running){

try{ // Nhận kết nối và đưa vào danh sách hàng đợi Socket s = serverSocket.accept();

InetAddress addr = s.getInetAddress(); (adsbygoogle = window.adsbygoogle || []).push({});

Debug.print("Nhan ket noi tu User:" + addr.getHostAddress() + " : " + addr.getHostName());

this.queue.add(s); }

catch (Exception e){ e.printStackTrace();

}

Hình 5.5 Đón nhận kết nối đến từ User và đưa User đó vào hàng đợi.

Khi Server tắt, tất cả các socket của Server và các dữ liệu trong hàng đợi sẽ được ngắt.

Với nhiệm vụ chính là đón nhận các kết nối từ Solver và người dùng, các thông số về port, số thread, độ dài hàng đợi … được tùy chỉnh trước khi chạy Server.

Một phần của tài liệu xây dựng hệ thống giải bài toán smt hiệu năng cao – phần máy chủ (Trang 28 - 31)