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