我们想为以下场景构建一个应用程序(c#/ .Net):
首先想到的是编写一个小应用程序,它将每X秒查询一个新的和现有消息的中央数据库。
也许有人已经开始从事类似的项目了? 客户端是否有数据库查询的方法?更好地使用其他技术,如WCF服务?
感谢您的帮助
马克
答案 0 :(得分:1)
听起来您需要推送通知的增强版本。 我建议使用push来进行所有的消息传递,它的传递速度更快,我发现它更可靠。只需使客户端连接到消息服务器并保持连接打开即可。每当消息应该显示给客户端时,让服务器通过连接(名称来自的位置)推送它。
要分组和管理可以使用数据库的客户端,它可能是最好的方法,但服务器需要处理所有打开的连接,数据库只能存储DATA,而不能存储代表连接的虚拟对象,所以服务器软件需要以不同的方式管理它们。
我的建议:每当服务器收到传入的客户端连接时,它都会接受并向客户端计算机查询一个ID号,该ID号也将用于在数据库中查找该客户端的信息。
然后它将使用该ID作为键创建字典,并将连接作为值。 这种方式在向确定的组发送消息时,您可以通过两种方式进行:
1)您可以从数据库加载属于该组的ID,然后将消息发送给它们。您必须检查字典的KEYS数组中是否存在该ID,因为确定的客户端可能尚未连接。
2)你可以迭代字典的KEYS数组,检查ID属于哪个组,如果是欲望组,则发送它。
如果您正在与大量客户打交道,我建议您使用方法1.
要禁用/删除客户端计算机上的消息,只需让服务器发送一条特殊的命令消息,客户端软件将其解释为“删除该消息”。为此,每个非命令消息都必须具有唯一的ID,以便命令消息可以告诉客户端软件该命令适用于哪个消息。
你的项目听起来很有趣。 我很乐意通过编写您可以使用的库来帮助您,或者如果您愿意,可以帮助您自己解决这个问题。 (免费,仅用于体验)。