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

Best approach for multi client desktop application

所以标题说明了一切。基于以下示例,哪种实施方式最好?

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

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

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

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

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

    • 3A - 每 x 秒拉一次客户端数据库?
    • 3B - 为用户实现刷新按钮 (+3A)
    • 3C - 通过数据库前面的服务器软件将更改推送到所有客户端?

3C点似乎比较复杂,因为需要在服务器软件中注册客户端并创建客户端 也适用于接受推送更新的小型服务器。

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

请注意,我说的是桌面软件而不是 Web 应用程序,也没有涉及任何安全问题;)

@teo,

我的选择是:

  1. 最好的办法是把房间锁上。如果您在插入记录之前执行检查,您将允许重复预订或在 2 个或更多客户同时执行检查的情况下覆盖某些预订,然后结束预订然后执行插入。也不要从客户端执行插入。创建一个服务器来为您执行此操作。
  2. 创建将响应所有请求的服务器。允许客户端随时打开数据库连接总是一个坏主意。您的数据库服务器可能很容易超载、受到攻击。管理连接和请求的服务器是个好主意。它还允许您的客户端更瘦,并通过网络发送更少的数据。您可以在服务器中已经有一个可用的连接池,从而节省了创建时间。我只是提到服务器的众多优势中的一小部分。
  3. 我不会选择你的任何一个 A B C 选项。正如我已经提到的,直接从客户端拉取数据库不是一个好主意。实现刷新按钮会带来非常糟糕的用户体验,并且看起来像是 90 年代创建的软件。服务器总是将数据库推送给所有连接的客户端是一种资源浪费。让客户端在需要某些东西时向服务器执行请求。服务器可能会将一些常用数据存储在内存中,以避免在可能的情况下查询数据库。

总而言之,您可以看出该体系结构显然是一个客户端服务器体系结构,很久以前就使用过,现在使用 Web 应用程序方法可以更好地处理您描述的这种需求,否则您会写很多自己创建服务器的代码。

所以,除非这是一个大学学习案例,或者有 1000 个兽人威胁你的生命,否则我不建议将其开发为客户端服务器,而是开发为 Web 应用程序。

干杯,

马塞洛