Đây là dự án nhỏ của em về chat giữa 3 client với nhau ( trong đó 2 client chung 1 user nhưng user đó dùng 2 thiết bị nên là 2 client , client còn lại của user khác )
vì là dự án test hệ thống nên mọi thao tác đều trên console và khi yêu cầu load lịch sử sẽ ấn “1” nhập vào console và hệ thống load lại 5 tin lịch sử gửi về cho user ( để minh họa load lịch sử )
thì các vấn đề em gặp phải hiện tại là
- khi 2 user cùng gửi tin nhắn lên server cùng lúc thì ID khởi tạo sẽ bị trùng trong file , ở phương án này em tách luồng gửi tin nhắn đi của user thành 2 luồng khác
luồng 1 gửi tin luôn lên server
luồng 2 tạo ID và lưu ID+tin nhắn vào file ( luồng này dùng single thread excutor để đảm bảo từng tin nhắn được tạo riêng 1 ID )
cách này mà gộp 1 luồng vừa gửi vừa tạo ID thì nếu 2 user spam tin nhắn thì sẽ có độ trễ vì bị khựng lại 1 nhịp để khởi tạo ID cho từng tin một
- Lỗi trùng lặp tin khi load lịch sử mà có tin nhắn mới gửi tới gây lỗi , ví dụ A đang load tin nhắn lịch sử 1 2 3 4 5 , thì B gửi tin thứ 6 tới , chen vào 1 trong các tin kia sẽ gây ra lỗi thành 1 2 6 3 4 5 mà lẽ ra phải là 1 2 3 4 5 6
xử lý bằng cách mỗi lần nhận tín hiệu lịch sử sẽ gửi tổng size sẽ load , như chương trình config là 5 tin một lần load
mỗi tin lịch sử sẽ có dòng “old message” đi kèm , quay về input của user , đếm đủ 5 old message thì in hết ra từ map , trong quá trình while (true) chạy map.put từng tin vào ( trong quá trình while chạy mà có tin từ user nào tới cũng vào map hết và sort theo ID nên ko lo bị loạn tin )
tuy nhiên anh mentor bảo cách của em vẫn có nhiều lỗi , xem lại 2 đoạn trên thuộc input/output phía client , em nhờ mọi người chẩn đoán xem những lỗi tiềm ẩn có thể nằm ở đâu ạ , cảm ơn mọi người
link git dẫn thẳng tới luồng outputDataToServer của user ạ
dự án đi theo mô hình MVC