多客户端桌面应用程序的最佳方法

时间:2015-07-10 08:50:08

标签: architecture client-server desktop

所以标题说明了一切。基于以下示例,这是实现它的最佳方式吗?

让我们在许多客户端计算机上安装一个房间预订桌面软件,每个客户端都可以预订房间和集中式数据库。

因此我们有客户端C1和客户端C2以及两个客户端都连接的数据库。在我想要从C1预订房间的时间 将它显示在C2的屏幕上,反之亦然,我自然不希望房间可以同时预订两次。

  1. 我应该在客户端开始预订时锁定数据库中的空间,并在完成时(或在时间限制之后)解锁 或者只是在插入之前检查数据库,如果同时预订房间则会失败?

  2. 我应该直接将请求发送到数据库,还是应该在数据库前面实施服务器软件来接收请求?

  3. 如何通知其他客户预订房间?

    • 3A - 每隔x秒在客户端拉数据库?
    • 3B - 为用户实施刷新按钮(+ 3A)
    • 3C - 通过数据库前面的服务器软件将更改推送到所有客户端?
  4. 点3C似乎更复杂,因为需要将客户端注册到服务器软件并制作客户端 也适用于接受推送更新的小型服务器。

    我会选择:在插入之前检查,直接向数据库发送请求(没有额外的服务器软件)和3B。 所以你会推荐相同的,还是有其他想法?

    请注意,我说的是桌面软件,而不是网络应用程序,而不是任何安全问题;)

1 个答案:

答案 0 :(得分:1)

@teo,

我的选择是:

  1. 最好的选择是锁定房间。如果您在插入记录之前执行检查,您将允许双重预订或覆盖一些预订,如果2个或更多客户同时执行检查,则在结束预订然后执行插入之前。也不要从客户端执行插入。创建服务器以执行此操作。
  2. 创建将响应所有请求的服务器。允许客户端随时打开数据库连接始终是个坏主意。您的数据库服务器可能很容易超载,受到攻击。管理连接和请求的服务器是个好主意。它还允许您的客户端更好,并通过网络发送更少的数据。您已经可以在服务器中拥有一个连接池,从而节省了创建时间。我只提到服务器的一些优点。
  3. 我不会选择任何A B C选项。正如我已经提到的,从客户端直接从数据库中提取是一个坏主意。实现刷新按钮会带来非常糟糕的用户体验,并且看起来像是在90年代创建的软件。并且始终将数据库推送到所有连接的客户端的服务器是浪费资源。让客户端在需要时向服务器发出请求。服务器可能会将一些常用的数据存储在内存中,以避免在可能的情况下查询数据库。
  4. 总结一下,你可以说这个体系结构显然是一个客户端服务器,很久以前就已经使用了,而你所描述的这种需求现在可以通过web app方法得到更好的处理,否则你会写出大量代码自己创建服务器。

    所以,除非这是大学学习的情况,否则有1000名兽人威胁你的生活,我不建议将其作为客户服务器,而是作为网络应用程序开发。

    干杯,

    马塞洛