【问题标题】:Client-Server - Identical model客户端 - 服务器 - 相同的模型
【发布时间】:2012-04-06 02:21:49
【问题描述】:

我和学校的一些人正在建立一个日历约会和会议系统作为一个项目。案例如下:

企业中的每个员工都有自己的会议和约会“日历”。他们当然可以添加这些,并邀请其他员工参加会议等等。该模型由大约 5-6 个不同的类组成。每个客户端将连接到服务器(将数据保存到数据库)。在客户端上的模型中完成更改时。服务器上的模型必须更新,并在所有其他连接的客户端上更新。

一般问题如下:我们应该怎么做才能确保每个连接到服务器的客户端以及服务器都具有相同的更新模型?

希望我已经说清楚了 :)(编辑:我没有 :)

编辑: 服务器和客户端应该具有完全相同的模型。我可以通过套接字传输多个对象吗?如果要以文本形式传输对象,最好的方法是什么,以便可以在服务器或客户端正确设置对象?

【问题讨论】:

    标签: java client-server


    【解决方案1】:

    对我来说,第一个陈述与最后一个陈述有些矛盾。就是说:

    每个员工都有自己的会议和约会日历。

    这对我来说,仅仅因为我在周一上午 10:00 开会,并不意味着其他人也应该开会,除非我邀请他们。因此,当所有客户不应该看到该信息时,就没有理由将其发送给所有客户;似乎最后一句话是在说:

    服务器上的模型必须更新,并在所有其他连接的客户端上更新。

    我会将您的模型拆分为 business(假设您支持多个业务)、employee (client)calendarevent (meeting/appointment) 以及其他任何相关内容。

    您需要确保客户端自己的日历明显与服务器同步,并首先使其正常工作。然后,您将希望在员工 A 要求员工 B 参加会议的情况下处理一个事件,该事件需要向员工 B 发送邀请以接受/拒绝参加会议,然后可以在服务器上更新该会议,然后复制给有兴趣的客户。

    我会将其实现为拉模型而不是推模型(本着传统实现的精神),其中客户端每隔x 间隔“轮询”服务器以询问其日历的最新信息。他们所做的任何更改都会被推送回服务器,然后服务器会根据需要更新数据库。

    这意味着您可以在服务器上愉快地保持所有内容同步,当客户端请求最新信息时,服务器只需将其发送回给他们,然后客户端会根据需要进行更新。

    通过这种方式,服务器可以通过在发生同步问题时返回通知来处理任何事件同步问题。例如:如果员工 B 接受会议,然后员工 A 在所有客户端同步之前取消会议。您可以只向员工 B 发送通知,说明这一点,而不必担心所有客户端都处于相同状态。

    希望这会有所帮助。

    ::编辑(基于问题编辑)::

    您可能想查看Serialization 以及如何实现它。我将创建一个数据传输对象 (DTO),它封装您要发送的数据,然后对其进行序列化并将其发送到客户端。客户端将数据反序列化为它需要使用的对象。可以把它想象成一个信封,它将您的对象组合在一起,并在需要时将它们发送给客户。

    关于让所有客户都能够看到所有日历的要求,我认为适用相同的基本原则。让客户端向服务器询问日历,然后让服务器返回一个有效负载,其中包含客户端所需的数据。

    【讨论】:

    • 快速评论:一个用户应该能够查看其他用户的日历
    猜你喜欢
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 2011-03-04
    相关资源
    最近更新 更多