Chương 4: CÀI ĐẶT CHƯƠNG TRÌNH
4.2.1. Khối chức năng cơ bản
Khối này là trung tâm của chương trình thực hiện các chức năng chính và bảo đảm duy trì sự liên lạc giữa điểm nút với máy chủ tìm kiếm. Khối được phân làm hai bộ phận triển khai tại hai phía: phía máy chủ tìm kiếm và phía điểm nút. Truyền thông giữa hai bộ phận sẽđược thực hiện thông qua socket.
Bộ phận triển khai phía máy chủ tìm kiếm bao gồm: Lớp Server: Lớp này có hai nhiệm vụ cơ bản:
Thường xuyên lắng nghe yêu cầu kết nối đến từ các điểm nút tại cổng 3000. Khi một yêu cầu kết nối được chấp nhận, Server sẽ tạo ra một tiểu trình (thread) riêng thông qua việc tạo mới một đối tượng thuộc lóp ServerThread. Tiểu trình này sẽ giữ vai trò tương tác với bộ phận triển khai ở phía điểm nút tương ứng.
Quản lý việc cập nhật hệ thống chỉ mục tập trung liên quan đến các thao tác bổ sung thêm tài liệu mới được chia sẻ, xoá bỏ tài liệu dừng chia sẻ và xoá bỏ tất cả các tài liệu thuộc về điểm nút thực hiện đăng xuất. Ba phương thức thực hiện nhiệm vụ này là: addDocument (), removeDocument () và removePeer (). Vì máy chủ tìm kiếm phải thực hiện cập nhật chỉ mục tập trung trong điều kiện tương tranh nên cả 3 phương thức này đều phải được đồng bộ hoá thông qua từ khoá synchronized.
Liên tục chạy một vòng lặp để lắng nghe các yêu cầu đến từ phía các điểm nút: chia sẻ, dừng chia sẻ, đăng xuất và gọi tới các phương thức tương ứng của lớp Server như đã nói ở trên đế tiến hành cập nhật chỉ mục tập trung. Kết quả của các hành động được trả lại cho phía điểm nút.
Nhận xâu truy vấn từ phía điểm nút, thực hiện tìm kiếm trực tiếp trong chỉ
mục tập trung và gửi trả danh sách kết quả về. Sở dĩ đối tượng thuộc lớp ServerThread có thể tìm kiếm trực tiếp trên chỉ mục tập trung vì hành động tìm kiếm chỉ yêu cầu các thao tác đọc chỉ mục. Thư viện Lucene hỗ trợ nhiều hành
động tìm kiếm có thể xảy ra cùng lúc trong khi chỉ mục đang được cập nhật. Bộ phận triển khai tại các điểm nút bao gồm:
Lớp ClientPeer: thực hiện một loạt các nhiệm vụ cơ bản sau:
Thiết lập một socket kết nối đến máy chủ tìm kiếm và nhận giá trị sessionId
được trả về.
Tạo ra một tiểu trình mới lắng nghe các yêu cầu kết nối từ các điểm nút khác bằng cách sinh một thể hiện của lớp FileServer.
Sinh mới một thể hiện của lớp Indexer với nhiệm vụ tạo ra chỉ mục bộ phận cho các tài liệu được chia sẻ.
Quản lý danh sách các tài liệu hiện đang được chia sẻ thông qua một thể
hiện của lớp SharedList.
Quản lý danh sách kết quả tìm kiếm trả về từ phía máy chủ thông qua một thể hiện của lớp ResultList.
Chạy một vòng lặp liên tục lắng nghe các thông tin trả về từ phía máy chủ
tìm kiếm, cập nhật vào SharedList và ResultList.
Cung cấp một loạt các phương thức được gọi đến khi có sự kiện xảy ra trên giao diện tương tác với người dùng. Ví dụ như phương thức share (),unshare (), search (), update (), logout () được gọi tương ứng với các hành động của người dùng.
Lớp Indexer: nhiệm vụ của lớp này là sinh chỉ mục cho một file tài liệu
đầu vào. Một chỉ mục của tài liệu sẽ bao gồm các trường được liệt kê ở bảng sau:
Khuôn dạng các thông điệp trao đổi giữa hai bộ phận trong khối chức năng cơ bản được định nghĩa thông qua việc sử dụng các hằng số của Interface Protocol: Hằng số INIT: Khi Server chấp nhận yêu cầu kết nối của điểm nút và tạo ra lớp ServerThread tương ứng thì một thông điệp mở đầu bằng hằng số INIT sẽ được gửi về cho điểm nút báo rằng đã thiết lập kết nối thành công.
Hằng số SHARE: Được điểm nút gửi lên cho máy chủ tìm kiếm báo hiệu rằng chuỗi dữ liệu tiếp theo sẽ là nội dung một file thuộc chỉ mục bộ phận của tài liệu vừa được chia sẻ. Máy chủ tìm kiếm sẽ tiếp tục nhận các file được gửi lên cho
đến khi có một thông điệp mở đầu bằng hằng số SHARE_FINISH báo hiệu rằng việc truyền chỉ mục bộ phận của tài liệu chia sẻđã hoàn tất. Ngay lập tức, máy chủ
tìm kiếm sẽ thu thập các file thành phần lại để tái tạo chỉ mục bộ phận và tiến hành cập nhật vào chỉ mục tập trung.
Hằng số SHARE_OK: Mở đầu cho thông điệp được máy chủ tìm kiếm gửi về điểm nút báo hiệu rằng việc cập nhật chỉ mục tập trung đối với tài liệu chia sẻ đã hoàn tất. Khi đó đối tượng ClientPeer tại điểm nút mới thực hiện thao tác cập nhật thông tin về file tài liệu vào danh sách chia sẻ thông qua đối tượng SharedList.
Hằng số SHARE_FALL: Mở đầu cho thông điệp được máy chủ tìm kiếm gửi về điểm nút báo hiệu rằng việc cập nhật chỉ mục tập trung đối với tài liệu chia sẻđã không thành công.
Hằng số UNSHARE: Mở đầu cho thông điệp gửi từ máy chủ tìm kiếm về điểm nút báo hiệu rằng quá trình cập nhật lại chỉ mục tập trung đối với việc dừng chia sẻ file tài liệu đã hoàn tất. Danh sách tài liệu chia sẻ tại điểm nút sẽđược cập nhật lại thông qua đối tượng SharedList.
Hằng số UNSHARE_FALL: Khi quá trình cập nhật chỉ mục tập trung trong trường hợp dừng chia sẻ một file tài liệu trên một điểm nút không được hoàn tất thì máy chủ tìm kiếm sẽ gửi về một thông điệp báo lỗi bắt đầu bằng hằng số này.
Hằng số UPDATE: Mởđầu cho thông điệp được điểm nút gửi lên máy chủ
tìm kiếm báo hiệu rằng chuỗi dữ liệu tiếp sau sẽ là nội dung một file thuộc chỉ mục bộ phận của tài liệu cần được cập nhật. Thông điệp mở đầu bằng hằng số
UPDATE_FINISH sẽ báo hiệu rằng quá trình chuyển chỉ mục bộ phận cho tài liệu cần cập nhật đã kết thúc.
Hằng số UPDATE_OK: Báo về cho điểm nút rằng quá trình cập nhật chỉ
mục bộ phận của tài liệu bị thay đổi nội dung vào chỉ mục tập trung đã hoàn tất. Hằng số UPDATE_FALL: Báo về cho điểm nút rằng quá trình cập nhật chỉ
mục bộ phận của tài liệu đã thay đổi nội dung vào chỉ mục tập trung không được hoàn thành.
Hằng số SEARCH: Mởđầu cho thông điệp được gửi từ điểm nút lên máy chủ tìm kiếm, tiếp sau hằng số này sẽ là nội dung của xâu truy vấn.
Hằng số INVALID_QUERY: Máy chủ tìm kiếm tiến hành phân tích xâu truy vấn để tạo ra truy vấn tìm kiếm theo chuẩn của Lucene. Nếu xâu truy vấn đầu vào không thể phân tích được thì thông điệp báo lỗi với nội dung là hằng số này sẽ được gửi lại cho điểm nút.
Hằng số RESULT: Mở đầu thông điệp gửi về cho điểm nút mà nội dung của nó là danh sách các kết quả nhận được sau khi tìm kiếm. Mỗi kết quả trong danh sách này sẽ bao gồm 5 thông tin cơ bản về một tài liệu:
Địa chỉ IP của điểm nút chứa tài liệu. Tên của file tài liệu (có cả phần mở rộng).
Đường dẫn của file tài liệu trên điểm nút hiện đang chia sẻ nó. Kích cỡ của file tài liệu (tính bằng bytes).
Thời điểm thay đổi nội dung file lần cuối cùng.
Hằng số LOG_OUT: Khi điểm nút tiến hành đăng xuất khỏi mạng, nó sẽ
gửi lên máy chủ tìm kiếm thông điệp có nội dung là hằng số này.