1

我有一个 .net winform 应用程序,我想允许用户通过 PHP 连接。

我使用 PHP 是出于个人选择并帮助降低成本。

快速概览:

人们可以连接到我的 .net 应用程序并启动一个新线程,即使在他们关闭浏览器后仍将继续运行。然后,他们可以随时登录以查看他们的线程正在执行的状态。

目前我想出了两种方法来做到这一点:

想法 1 - 插座:

当用户第一次连接并产生一个线程时,GUID 与他们的“网络”登录详细信息相关联。

下次 PHP 通过套接字连接到应用程序时,PHP 会发送一个带有 GUID 的“GET.UPDATE”命令,然后将其添加到给定 GUID 的 MESSAGE IN QUEUE 中。

.net 应用程序生成的线程正在检查 MESSAGE IN QUEUE,当它看到“GET.UPDATE”命令时,它会将数据编码为 json 并将其添加到 MESSAGE OUT QUEUE

下次有来自该 GUID 的 PHP 套接字请求时,它会在 MESSAGE OUT QUEUE 中发送数据。

想法 2 - 数据库:

与上面相同的想法,但来自 PHP 的命令被放入数据库

.net 应用程序线程检查数据库中的新 IN MESSAGES

如果它得到一个 GET.UPDATE 命令,它会将 json 编码的数据添加到数据库中

下次 PHP 连接时,它将检查数据库中的新消息并相应地报告数据。

我只是想知道上述两个想法中的哪一个最好。乱搞插座很快就会变成一种痛苦。但是我担心数据库的想法,如果我有 1000 个用户,我们将有一个数据库表,如果队列中有很多消息,它可能会开始变慢

任何建议都会被采纳。

4

1 回答 1

0

任何一种解决方案都是可以接受的,但如果您正在考虑高用户负载,您可能需要重新考虑您的方法。如果您正在查看数以千计的请求,WinForms 解决方案不会像 WCF 解决方案那样强大。我不建议仅将数据库用于消息传递,除非您的流程结果已经存储在数据库中。如果是,我不建议直接公开数据库,而是通过公开的 API 控制数据库访问。数据库具有高可用性/可扩展性,因此除非您正在查看 SQLite 之类的低端数据库,否则我不会过多担心负载。

如果您正在考虑公开公开数据库并出于任何原因将其用作消息传递服务,我可能会建议Postgresql 的 LISTEN/NOTIFY。Npgsql 对此有很好的支持,而且很容易实现。Postgresql 也可以免费获得一个大型社区的支持。

于 2012-07-11T14:00:02.103 回答