Tôi sắp viết một giao thức tin nhắn đi qua một luồng TCP. Người nhận cần phải biết ranh giới thông điệp ở đâu.Viết giao thức luồng: Trường kích thước thư hoặc Dấu phân cách thư?
Tôi có thể gửi 1) tin nhắn có độ dài cố định, 2) trường kích thước để người nhận biết thông báo lớn như thế nào, hoặc 3) một trình kết thúc tin nhắn duy nhất (tôi đoán điều này không thể được sử dụng ở bất kỳ nơi nào khác trong thư) .
Tôi sẽ không sử dụng # 1 vì lý do hiệu quả.
Tôi thích # 2 nhưng liệu luồng có thể không đồng bộ hóa được không?
Tôi không thích ý tưởng # 3 vì nó có nghĩa là người nhận không thể biết kích cỡ của thông báo trước và cũng yêu cầu người kết thúc không xuất hiện ở đâu đó trong thư.
Với # 2, nếu có thể không đồng bộ, tôi có thể thêm người kết thúc hoặc tôi được đảm bảo không bao giờ bị đồng bộ miễn là chương trình người gửi có chính xác không? Có cần phải làm # 2 VÀ # 3?
Vui lòng cho tôi biết.
Cảm ơn, jbu
_Ngoài ra, việc biết kích thước tin nhắn sớm trong quá trình truyền sẽ giúp phân bổ bộ nhớ dễ dàng hơn trên đầu nhận._ Một từ cẩn thận: Đảm bảo giới hạn số lượng bộ nhớ được cấp phát. Nếu không, bạn dễ bị tấn công DDoS với các gói tùy chỉnh có trường kích thước là 2^32-1 (hoặc lớn hơn số nguyên của bạn), nhanh chóng lấp đầy bộ nhớ của bạn. – Kenji