我希望为我们公司的某个网站建立一个在线客户支持系统,并对结构有一些疑问。
情景就是这样。我们希望我们网站的用户能够点击“在线聊天支持”按钮,此时他们会弹出一个弹出窗口,尝试将它们连接到我们的支持团队。
另一方面,我们的支持团队将运行桌面客户端。每当我们网站上的用户点击该链接时,所有桌面客户端都将“响铃”。每当支持团队成员“回答”该呼叫时,其他客户端将停止响铃,该成员将开始与该网络用户聊天。鉴于我们的桌面客户端将使用C#.NET中的WPF制作而我们的站点是ASP.NET MVC 2 - 在两者之间建立通信的最佳方式是什么?
我最初的想法是让网络端将聊天存储在SQL数据库中,并以某种方式“Ping”相关桌面客户端告诉它更新其聊天记录。同样适用于桌面到网络。但我不确定如何在两个不同平台之间实现这一点。如果它是桌面客户端到桌面客户端,我想它会容易得多,但事实并非如此。
此外,请记住,我发现已经有商业应用程序可以做到这一点。但是,我们需要一些超出简单聊天的定制功能 - 不值得进入细节,但基本上我们必须实现自己的解决方案。
非常感谢任何帮助。
答案 0 :(得分:1)
Web技术是实现实时交互的不适当平台。当然,它可以完成,但您肯定会遇到可伸缩性,响应性和开发工作的问题。我恳请您仔细检查您的要求,并考虑是否可以利用供应商产品来完成您想要做的事情。
如果您仍然希望自己解决问题,那么您必须克服的主要障碍是如何将消息推送到浏览器。使用纯Web技术从服务器“ping”浏览器是不可能的,因为HTTP建立在“只读”请求/响应模型上。服务器中的客户端之间没有维持持久连接。服务器完成将页面发送到broswer后,连接就消失了。
您可以在Web服务器上轮询新消息,但这不是可扩展的解决方案。如果您只处理非常小(例如个位数)的用户数,那么这可能会有效,但您的响应速度将受到轮询速度的限制,并且您轮询的速度越快,此解决方案的可扩展性就越低是
更好的解决方案是使用Silverlight,Flash或浏览器中运行的其他一些胖客户端技术。然后,您可以实现处理客户端之间的消息路由的服务。 This article on CodeProject可能是一个很好的起点。