2012-07-11 185 views
1

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

我使用PHP的个人选择,并帮助保持低成本。

快速概述:

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

目前,我已经提出了两种方法可以做到这一点:

理念1 - 插座:

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

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

在.NET应用程序产生的线程正在检查的消息队列中,当它看到了“GET.UPDATE”命令,然后将数据endcodes为JSON并将其添加到下一次当消息出队列

是来自该GUID的PHP套接字请求,它将其发送到MESSAGE OUT QUEUE中。

理念2 - 数据库:

相同的想法如上但是从PHP命令在数据库中保存放入数据库

新的.NET应用程序线程检查邮件中

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

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

我只是想知道上述两个想法是最好的。随着插座混淆可能会成为一种痛苦。但我担心数据库的想法,如果我有1000的用户,我们将有一个数据库表,如果队列中有很多消息,可能会开始减慢。

任何建议都会被处理。

回答

0

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

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