2

我的程序:

  1. 不同的客户端连接到服务器(用户登录)

  2. 然后服务器开始 每秒(或更少)向所有人推送小数据(低于 1KB)。

我的问题:

  1. 我应该使用什么服务?WCF 是正确的吗?
  2. 如果是 WCF,那么使用哪个协议?http, tcp ... ?

起初我认为 WCF 是正确的选择。我实现了一个基本的简单。然后突然我注意到这只是一个客户端到服务器的连接。并且服务器无法以相同的方式与客户端通信。除非我也在客户端上启动服务,这使它成为服务器。

所以最后,考虑到我提到的速度因素和要使用的正确协议,我应该如何实现服务器和客户端之间的这种 2 路通信。

更新

好的,让我添加一些细节。这实际上是一个Teacher客户端<>Server<>Student客户端通信程序。老师在 WPF 的 inkCanvas 上画了一些东西。这幅画应该被推送给所有学生客户。这就是为什么这些数据应该由服务器推送。并且通信必须是两种方式。

4

4 回答 4

1

一种可能性是考虑使用网络库。查看这篇关于使用 NetworkComms.Net 创建 WPF 聊天应用程序的文章。与 WCF 相比,客户端 -> 服务器、服务器 -> 客户端关系是对称的,因此推送通知是完全直接的。您还可以选择通信协议,例如 TCP 或 UDP,并且可以轻松添加自己的扩展来处理传出/传入数据。

免责声明 - 我是这个库的开发人员。

于 2013-04-28T16:08:56.540 回答
1

我实现了完全相同的功能来在两个 WPF 应用程序之间进行通信。要回答您的问题,是的,我认为 WCF 是最好的方法。我猜你已经使用 WCF 实现了单向通信。为了能够让服务器与客户端对话,您需要实现回调,是一篇很好的文章。

于 2013-04-28T16:55:03.133 回答
0

您最好不要让服务器将数据推送到它的客户端,而是让客户端从服务器拉取数据。虽然这对于双工来说是可能的,但并不强烈推荐它,因为大多数 ISP 或服务器环境出于安全原因不允许来自其防火墙内的出站消息。

这是我的建议:

让客户端应用程序偶尔从服务器拉取,而不是让服务器推送给它的客户端。这样,服务器就不必有一个恒定的连接,因为它不能扩展,更重要的是,通信连接是来自一个应用程序(即服务器)的非常昂贵的资源。

重新设计你的方法。

于 2013-04-28T16:25:30.143 回答
0

我使用 net.tcp 编写了一个托管在 Windows 服务上的 WCF 服务器,它绝对可以将数据推送到多个客户端。该框架为您完成了大部分侦听、接受和多重连接,因此肯定会产生很多好处。

您的场景中棘手的部分是与学生客户端共享来自教学客户端的数据。AFAIK,没有内置的方法可以将数据从一个客户端-服务器连接传输到另一个。

一种天真的但简单的方法是将教师数据存储到临时位置(如文件或数据库并对其具有某种互斥锁),当需要将数据传输给学生时,只需从临时位置读取。

或者您可以将您的架构更改为Peer-To-Peer

于 2013-04-28T17:06:47.517 回答