2012-10-23 1 views
0

클라이언트 - 서버 애플리케이션을 구축 중입니다.클라이언트가 데이터 그램/멀티 캐스트를 통해 List를 통지 받음

LinkedList<MyObject> objects; 

객체가 추가되거나 삭제 될 때마다, 고객이 알아야 : 서버는 개체의 목록을 유지합니다. 그들은 이미 멀티 캐스트 그룹에 가입했습니다. 변경 사항을 알리는 가장 좋은 방법은 무엇입니까?

LinkedList를 확장하고 Serializable으로 구현하는 클래스를 만들어야합니까?

+0

일부 이벤트 기반 프로토콜 (예 : 상위 수준)에 변경 알림을 코딩하는 것이 훨씬 쉽고 안정적이라고 생각합니다. 그런 다음 멀티 캐스트 또는 다중 TCP 연결 여부에 관계없이 적절한 프로토콜을 사용하도록 해당 프로토콜의 구현을 구성하십시오. – Robin

답변

2

변경 될 때마다 업데이트 된 목록을 멀티 캐스팅하는 것은 확실히 간단하지만 문제가있을 수 있습니다.

  • 목록이 커지거나 업데이트가 자주 발생하면 확장성에 문제가있을 수 있습니다. 매번 전체 목록을 보내지 않고 목록에 변경 사항을 "델타"로 보내는 것을 고려하십시오.

  • ObjectOutputStream을 사용한 직렬화는 비싸지 만 사용자 정의 readObjectwriteObject 방법을 작성하여 성능을 향상시킬 수 있습니다. (리스트의 직렬화는 이미 최적화되어 있습니다 ...)

  • LinkedList을 서브 클래스화할 필요는 없습니다. 이미 Serializable입니다.

  • 경쟁 조건 및 신체 상해를 피하기 위해 목록 구조를 동기화해야 할 가능성이 높지만 병목 현상이 발생할 수 있습니다. ListQueue 또는 Deque의 동시 구현으로 대체하는 것을 고려하십시오.

+0

좋은 컬렉션. 멀티 캐스트는 순서를 유지하지 않으므로 순서에 관계없이 업데이트를받을 수 있습니다. – jtahlborn

+0

@jtahlborn - 좋은 지적이지만, 간단한 문제 해결 방법이 있습니다. (더 큰 관심사는 메시지 손실, 특히 델타가 전체 목록 대신 전송되는 경우입니다.) –

+0

예, 나는 메시지 손실뿐만 아니라 고장의 두 가지 모두를 생각하고있었습니다. 메시지 손실은 델타 및 전체 업데이트에 영향을줍니다 (향후 전체 업데이트가 이전 손실 된 업데이트를 보완 할 수 있음). – jtahlborn