c#寻求双向通信.(WCF)
本文关键字:WCF 双向通信 | 更新日期: 2023-09-27 18:11:09
My program:
-
不同的客户端连接到服务器(用户登录)
-
服务器开始每秒(或更少)向所有服务器推送小数据(小于1KB)。
我的问题:
- 我应该使用什么服务?WCF是正确的吗?
- 如果是WCF,那么使用哪个协议?Http、TCP…?
一开始我认为WCF是正确的选择。我实现了一个基本的简单。然后突然我注意到这只是一个客户端到服务器的连接。和服务器不能以相同的方式与客户端通信。除非我在客户端也启动服务,这使它成为服务器。
所以最后,我问我应该如何实现服务器和客户端之间的双向通信,考虑到我提到的速度因素和使用正确的协议。
好的,让我补充一些细节。这实际上是一个Teacher客户端<>服务器<学生客户端>学生客户端>通信程序。老师在WPF的墨水画布上画了一些东西。这幅画应该推送给所有学生客户。这就是为什么这些数据应该由服务器推送。交流必须是双向的
一种可能性是考虑使用网络库。看看这篇关于使用网络通信的文章。Net创建WPF聊天应用程序。与WCF相反,客户端->服务器、服务器->客户端关系是对称的,所以推送通知是完全直接的。您还可以选择通信协议,例如TCP或UDP,并且可以轻松地添加自己的扩展来处理传出/传入数据。
免责声明-我是这个库的开发人员。
我实现了完全相同的功能来在两个WPF应用程序之间进行通信。回答你的问题,是的,在我看来,WCF是最好的方法。我猜你已经使用WCF实现了单向通信。为了能够让服务器与客户端对话,您需要实现回调,这里有一篇很好的文章作为开始。
最好不要让服务器向客户端推送数据,而是让客户端从服务器端拉数据。虽然使用双工可以实现这一点,但不强烈建议这样做,因为大多数ISP或服务器环境出于安全原因不允许从防火墙内部出站消息。
我的建议是:
让客户端应用程序偶尔从服务器拉取,而不是让服务器推送到它的客户端。这样,服务器就不必有一个固定的连接,因为它不能扩展,更重要的是,通信连接是来自一个应用程序(即服务器)的非常昂贵的资源。
重新设计你的方法
我写了一个WCF服务器托管在Windows服务使用。TCP,它绝对可以将数据推送到多个客户端。这个框架为你做了很多的监听、接受和多个连接,所以肯定会有很多好处。
在您的场景中,棘手的部分是与学生客户端共享来自教学客户端的数据。坦率地说,没有内置的方法将数据从一个客户机-服务器连接传输到另一个客户机-服务器连接。
一种简单的方法是将teacher的数据存储到一个临时位置(比如文件或数据库,并对其进行某种互斥锁),当将数据传输给student时,只需从临时位置读取。
或者您可以将您的体系结构更改为Peer-To-Peer