我和一些在学校的人正在建立一个日历预约和会议系统作为一个项目。具体情况如下:
企业中的每一位员工都有自己的“日历”,有会议和约会。他们当然可以加上这些,并邀请其他雇员参加会议等等。该模型由5-6个不同的类组成.每个客户端将连接到服务器(该服务器将数据保存到数据库)。当在客户端上对模型进行更改时。服务器上的模型必须更新,并在每个其他连接的客户端上更新。
一般的问题如下:我们应该做什么来确保每个连接到服务器的客户端以及服务器都有相同的更新模型?
希望我已经说清楚了:) (编辑:我没有:)
编辑:服务器和客户端应该有完全相同的模型。我可以通过套接字传输多个对象吗?如果要以文本形式传输对象,那么在服务器或客户端正确设置对象的最佳方法是什么?
发布于 2012-03-21 15:01:21
对我来说,第一种说法与最后一种说法有些矛盾。它说:
每个员工都有自己的日历,有会议和约会。
对我来说,仅仅因为我周一上午10点有个会议,并不意味着其他人也应该参加那个会议,除非我邀请他们。因此,当所有客户不应该看到这些信息时,就没有理由将这些信息发送给它们;最后一条声明似乎是这样说的:
服务器上的模型必须更新,并在每个其他连接的客户端上更新。
我会将您的模型划分为business (假设您支持多个业务)、employee (client)、calendar、event (meeting/appointment)以及其他相关内容。
显然,您需要确保客户机自己的日历与服务器同步,并且首先让它正常工作。然后,您将希望在员工A要求员工B参加会议的情况下处理该事件,该事件需要向员工B发出邀请,以便他们接受/拒绝参加会议,然后可以在服务器上更新该会议,然后将其复制到有兴趣的客户端。
我会将其实现为一个拉模型,而不是一个推送模型(在传统实现的精神下),在这个模型中,客户端“轮询”服务器的每一个x间隔来请求他们的日历的最新信息。它们所做的任何更改都会被推回服务器,然后服务器根据需要更新数据库。
这意味着您可以在服务器上愉快地保持一切同步,当客户端询问最新信息时,服务器只需将其发回给它们,然后客户端根据需要进行更新。
这样,服务器就可以通过返回发生同步问题的通知来处理事件的任何同步问题。例如:如果员工B接受会议,那么员工A会在所有客户端同步之前取消会议。您只需将通知发送回员工B,说明这一点,而不必担心所有客户端都处于同一状态。
希望这能有所帮助。
*编辑(基于问题编辑)::
您可能需要查看串行化以及如何实现它。我将创建一个数据传输对象(DTO),该对象封装要发送的数据,然后将其序列化并发送到客户端。客户端将数据反序列化为它需要使用的对象。把它想象成一个信封,将您的对象组合在一起,并在需要时将它们发送给客户端。
至于所有客户都能看到所有日历的要求,我认为同样的基本原则也适用。让客户机向服务器询问日历,然后让服务器返回包含客户端所需数据的有效负载。
https://stackoverflow.com/questions/9806765
复制相似问题