M ở đầ u 5
3.4.2. Giao thức máy khách 31
Tham gia mạng Chord
Mỗi node muốn tham gia vào quá trình nhận dữ liệu từ máy chủ thì bước đầu tiên là phải tham gia vào mạng Chord do máy chủ tạo ra. Hàm join() trong giao thức Chord
được gọi khi một node muốn ra nhập mạng. Thông tin hệ thống yêu cầu là địa chỉ IP và cổng kết nối của máy chủ. Nhận gói tin Tham gia nhóm multicast Xử lý gói tin Chuyển tiếp gói Nhận gói tin Hiển thị hình ảnh
Máy khách sẽ khởi tạo một cổng UDP để luôn luôn lắng nghe gói tin gửi đến từ
máy chủ hoặc từ một máy khách khác. Khi nhận được gói tin thì một hàng đợi được sử
dụng để lưu trữ gói tin phục vụ cho việc xử lý về sau. Chuyển tiếp gói tin
Cứ mỗi khi nhận được một gói tin thì hàm decodePacket() được gọi để bóc tách gói tin và lấy về trường LimitID – quy định giới hạn chuyển tiếp. Sau đó gói tin sẽ được chuyển tiếp cho các finger trong bảng Finger table với ID trong khoảng ID từ chỉnh nó cho đến LimitID.
Định dạng gói tin chuyển tiếp
newLimitID imageID numberOfParts partID data
-newLimitID là giới hạn mới được áp dụng cho node nhận tiếp theo -Các trường còn lại sẽđược dữ nguyên như khi gói tin được nhận Xử lý gói tin
Do mỗi frame đều được phân mảnh tại nguồn nên tại máy khách cần thực hiện quá trình ghép các gói tin lại với nhau để tạo thành frame gốc. Quá trình đó được thực hiện bởi 2 lớp Image và ProccessImage.
Giả sử ta nhận được gói tin với trường imageID là i, numberOfParts là n, partID là j.
Quá trình ghép ảnh thực hiện theo nguyên tắc sau:
- Nếu đây là lần đầu tiên nhận được gói tin với imageID là i thì khởi tạo danh sách
Li có chiều dài bằng n và lưu gói tin mới nhận vào vị trí j trong danh sách.
- Ngược lại, lưu gói tin vào vị tri j trong danh sách Li đã tồn tại từ trước, kiểm tra xem danh sách đã đầy hay chưa. Gọi hàm merge() để ghép các gói tin khi danh sách đầy hoặc khi hết thời gian timeout. Hình ảnh thu được sau khi ghép dưới dạng chuỗi byte sẽđược lưu vào hàng đợi phục vụ cho việc hiện thị.
Hiển thị hình ảnh
Để tránh hiện tượng hiển tượng tốc độ hình ảnh thay đổi một cách đột ngột, lúc quá nhanh, lúc quá chậm, thay vì hiển thị ngay lập tức hỉnh ảnh khi nó được nhận đủ thì hình
Giả sử ta quy định cứ 150 ms thì hiển thị một hình ảnh, tức ≈ 7 hình/s. t1 t2 t3 t4
frame1 frame2 frame3 frame4
Hiện tại có 4 frame trong hằng đợi với t1, t2, t3, t4 lần lượt là thời gian các frame đó
được nhận đủ. Ta có Δ1, Δ2, Δ3, Δ4 lần lượt là khoảng thời gian từ khi nhận được mảnh
đầu tiền cho đến khi nhận được mảnh cuối cùng. Sau khi hiển thị frame1 ta sẽ đợi một khoảng thời gian là (150 – (t2 - t1 ) - Δ2 ) rồi tiếp tục hiển thị frame2. Tương tự với frame3 và frame4. Giá trị 150 có thểđược thay đổi bằng các giá trị khác tùy thuộc vào từng loại mạng.