[Đã chuyển đến đây theo đề xuất của người dùng SO (10k SO +) ]
Tôi muốn phát triển một ứng dụng ngang hàng. Mặc dù tôi có nhiều kinh nghiệm trong các ứng dụng LOB, nhưng tôi mới tham gia vào lĩnh vực P2P.
Tôi đã có một ý tưởng sơ bộ về cách mọi thứ nên hoạt động nhưng cần thêm một số chi tiết để điền vào sự hiểu biết của tôi.
Những gì tôi biết (tin) tôi cần phải làm:
- Một tỷ lệ đáng kể khách hàng cần kích hoạt các kết nối gửi đến (quy tắc ala uPnP / NAT)
- Các nút nên chia sẻ các nút đã biết khác để cung cấp khả năng phục hồi nếu bất kỳ nút cụ thể nào bị hỏng
- Một số hình thức đồng bộ hóa / tìm đường là cần thiết để gửi dữ liệu giữa các máy khách tùy ý
- Có thể một số tài nguyên đánh hơi để phân biệt giữa các máy khách "câm" và "siêu nút" mạnh hơn để xử lý đồng bộ / chia sẻ danh sách nút và có thể chuyển tiếp tin nhắn
- Các khách hàng không có hỗ trợ trong nước nên giữ một kết nối ra ngoài thông qua đó họ có thể nhận thông tin về các nút để kết nối với
Nói tóm lại, tôi hy vọng sẽ cung cấp (lúc đầu) một dịch vụ trò chuyện / nhắn tin không phụ thuộc vào kết nối với bất kỳ máy chủ trung tâm cụ thể nào. Trong khi tôi tưởng tượng mình sẽ cần cung cấp một số "siêu dữ liệu" tập trung để bắt đầu mọi thứ (hoặc sau khi nâng cấp đáng kể), thì chúng nên là tùy chọn sau khi mạng P2P chức năng được thiết lập.
Tôi có thể thấy hàng loạt vấn đề và không biết cách giải quyết chúng. Chủ yếu là làm thế nào để ...
- Xác thực người dùng đến các nút khác mà không có cơ quan trung ương để xác minh
- Phối hợp các nút nào biết về các nút khác (số cực tiểu / theo độ trễ / ???)
- Cho phép một người dùng nhất định xác định xem người dùng (hoặc nút) khác có trực tuyến không
- Xử lý tình huống trong đó 2 nhóm nút bị ngắt kết nối vật lý (bị chặn không khí) và cách đồng bộ lại khi kết nối lại các nhóm
- Vân vân
Tôi biết đây là một câu hỏi khá mở, vì vậy trong khi các mẫu thiết kế cấp cao sẽ được đánh giá cao, điều tôi thực sự tìm kiếm là một hướng dẫn đúng đắn về cách người khác xử lý các vấn đề này (và những vấn đề tôi chưa xem xét ).