Java 通过数据报/多播通知客户列表

Java 通过数据报/多播通知客户列表,java,networking,serialization,multicast,Java,Networking,Serialization,Multicast,我正在构建一个客户机-服务器应用程序。 服务器保留一个对象列表: LinkedList<MyObject> objects; LinkedList对象; 每次添加或删除对象时,客户端都应该知道这一点。 他们已经加入了多播组。 让他们随时了解变更的最佳方式是什么 我应该创建一个扩展LinkedList的类并用Serializable实现它吗?每次更新列表时对其进行多播当然很简单,但可能会有问题 如果列表变大或更新频繁,则可能会考虑可伸缩性。考虑将更改发送到“Deltas”列表,

我正在构建一个客户机-服务器应用程序。 服务器保留一个对象列表:

 LinkedList<MyObject> objects;
LinkedList对象;
每次添加或删除对象时,客户端都应该知道这一点。 他们已经加入了多播组。 让他们随时了解变更的最佳方式是什么


我应该创建一个扩展LinkedList的类并用Serializable实现它吗?

每次更新列表时对其进行多播当然很简单,但可能会有问题

  • 如果列表变大或更新频繁,则可能会考虑可伸缩性。考虑将更改发送到“Deltas”列表,而不是每次发送整个列表。

  • 使用
    ObjectOutputStream
    进行序列化可能成本高昂,不过您可以通过编写自定义
    readObject
    writeObject
    方法来提高性能。(列表的序列化已优化…)

  • 要做到这一点,您不需要子类化
    LinkedList
    。它已可
    序列化

  • 您很可能需要同步列表结构以避免竞争条件和混乱,但这将造成潜在的瓶颈。考虑同时使用<代码>队列> <代码>或<代码> Deque < /代码> .< /p>
  • 替换<代码>列表>代码>。
收集了大量问题。您可能还需要补充的一点是,多播并不能为您保持秩序,因此您可能会使更新失去秩序。@jtahlborn-这是一个很好的观点,尽管有一个简单的解决方法。(更大的担忧是消息丢失,特别是如果发送的是Delta而不是完整列表。)是的,我想到的是消息丢失和无序。消息丢失会影响增量和完整更新(尽管将来的完整更新可以弥补以前丢失的更新)。我认为将更改通知编码为某种事件驱动协议(即更高级别)会更容易、更可靠。然后简单地配置该协议的实现以使用适当的网络协议,无论是多播还是多个TCP连接。