服务器和客户端之间的双向通信
本文关键字:双向通信 之间 客户端 服务器 | 更新日期: 2023-09-27 18:36:10
情况:我们有一个web应用程序在服务器上运行。此应用程序需要从位于不同网络上的其他一些PC(客户端(获取数据。
在客户端的pc上,WCF
使用其本地Sql db
托管在Windows Services
中。我想在服务器和客户端之间进行双工通信,以便相互共享数据。数据共享是指客户端和服务器之间共享数据表、数据集、字符串等。
问题:
1(我无法控制客户端电脑上的防火墙、代理、NAT。大多数公司员工电脑都有很多网络安全功能,例如防火墙阻止ICMP流量和一些端口,一些路由器可能禁用端口转发等,客户端可以更改网络位置。不过,我不想在客户端路由器、代理、防火墙上做任何设置。在沟通过程中,我该如何处理客户的这种问题?正如你所知,skype在这种情况下工作得很完美。
防火墙经常阻止到客户端的入站连接;客户端可能无法从服务器访问,它可能在路由器后面使用NAT转换,因此在没有在路由器上设置端口转发和某些新路由器禁用端口转发的情况下无法联系。
2(客户端没有IIS。
我不想允许在客户端PC上进行远程访问。
有100多个客户端,只有一个服务器。一个服务器需要与不同网络上的许多客户端进行通信。
3(一方面我的客户端应用程序使用窗口应用程序和托管在窗口服务中的wcf,另一方面我在服务器上使用Web应用程序。所以它的平均通信是在台式电脑和网络电脑之间,这是个问题。
如果两者都使用web应用程序,那么进行双工通信就没有问题。因为我知道WEBRTC适合那里。哈哈。
我已经测试并发现问题的技术
WSDualHttpBinding: 如果客户端在NAT后面,则不起作用。检查此项以了解详细信息,请单击此处
MSMQ: 如果客户端超过1,它的技术就不好,性能问题也因为它使用RAM内存。检查这里点击这里
Xsocket: 如果客户端上的ICMP流量被防火墙阻止,它也不起作用。在这里检查点击
WebRTC: 它工作正常,但支持网对网通信。作为我的客户端,我有win应用程序。
Socket.io: 它需要设置node.js和许多其他东西,很难实现,因为我需要在现有的应用程序上实现,我不是在制作新的应用程序。
C#套接字程序: 如果客户端支持NAT,它将不起作用。检查此处单击以获取详细
服务总线继电器: 即使进行测试也不是免费的。
socketPro: 我研究过,发现它很好,但在谷歌上找不到合适的样本。这样我就可以测试了。
正版频道: 我在谷歌上找不到任何样本。
让我们看看SignalR问题。:服务器端我运行一个控制台应用程序,客户端我运行两个应用程序,一个是控制台,另一个是web。当我运行控制台客户端应用程序时,它并没有启动与服务器的连接,但当我使用web客户端应用程序的时候,它运行得很好。示例链接在这里SignalR双向通信我不明白为什么会这样??
请告诉我处理这种情况最安全、最快捷的方法是什么?我应该使用什么方法?
SignalR似乎适合这个解决方案,因为它很灵活。它协商最快的可用沟通渠道,这正是你所寻找的。
你应该调查一下它的问题,signalR最终会起作用。
我广泛使用SignalR在服务器(C#(之间、服务器和移动应用程序(C#、Xamarin、iOS、Android(之间进行通信。服务器位于不同的位置,移动应用程序可以位于任何位置。这一切都非常可靠。
看看:http://www.asp.net/signalr/overview/deployment/tutorial-signalr-self-host在这里http://www.asp.net/signalr/overview/guide-to-the-api/hubs-api-guide-net-client
我一直在业余时间使用套接字(诚然,在c++中,不是c#,但应该没有区别(,即使没有端口转发,我也从未遇到过连接到防火墙/路由器后面的客户端的问题。
路由器和防火墙通常不喜欢类似服务器的程序,例如将套接字绑定到端口号的程序。你的客户做过与绑定相关的事情吗?因为它不应该。
不用说,我建议使用套接字程序。在我看来,这是最灵活的方式。