Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Web服务与持久套接字_C#_Wcf_Web Services_Tcp_Soa - Fatal编程技术网

C# Web服务与持久套接字

C# Web服务与持久套接字,c#,wcf,web-services,tcp,soa,C#,Wcf,Web Services,Tcp,Soa,我计划自己围绕这个问题做一些基准测试。但我认为从“社区”那里得到一些初步反馈会很好。有没有人对这两种技术的利弊做过分析?我的想法: 与持久连接相比,为web服务调用打开和关闭TCP/IP连接相对昂贵 处理间歇性连接错误和状态等。。。使用基于web服务的框架会更容易 你看不到魔兽世界使用web服务 一个我似乎在任何地方都找不到答案的问题(即使在这里)。。。是否限制了单个网卡可以支持的持久连接等?您将消息格式和传递方式结合在一起。如果您有这样一种消息,您可以节省比特数并重新排列片段,以便更快地使

我计划自己围绕这个问题做一些基准测试。但我认为从“社区”那里得到一些初步反馈会很好。有没有人对这两种技术的利弊做过分析?我的想法:

  • 与持久连接相比,为web服务调用打开和关闭TCP/IP连接相对昂贵
  • 处理间歇性连接错误和状态等。。。使用基于web服务的框架会更容易
  • 你看不到魔兽世界使用web服务

一个我似乎在任何地方都找不到答案的问题(即使在这里)。。。是否限制了单个网卡可以支持的持久连接等?

您将消息格式和传递方式结合在一起。如果您有这样一种消息,您可以节省比特数并重新排列片段,以便更快地使用消息,那么Web服务可能不是您的正确选择。如果我假设您有相对较大的基于文本的消息,那么Web服务可能适合您的需要。下面我将回答你的想法:

  • 打开/关闭TCP连接:是的,这相对比较昂贵。Web服务依靠HTTP(和TCP/IP)以以下方式提供帮助:
    • 如果单个客户端必须发送大量消息,那么它们很可能会通过“保持活动”HTTP连接发送这些消息
    • 您可以在web服务器前面放置一个负载平衡器,它将进一步优化TCP层。它将处理TCP/IP级别的连接混乱,并且只提供少数到web服务器的长期连接
  • 处理断断续续的连接:HTTP是无状态的使这变得更容易
  • WoW with WS:我不确定所涉及的消息类型,但WoW需要发送一系列非常短的消息,HTTP头本身可能会有太多开销,无法保证Web服务
我不知道你最后一个问题的确切答案。您将有一个由web服务器可以处理的连接数施加的限制,然后是由操作系统以套接字数的形式施加的另一个限制

希望这有帮助。
-Raj

这是一个非常普通的问题,是您明确提出的多个问题,以及您可能知道或不知道的更多相关问题

一个问题是HTTP与其他协议(准确地说是消息交换模式)的对比。HTTP是一种新的通信模式,许多通信模式不适合请求-响应模式。持久化连接允许更灵活的面向消息的协议,如典型的全双工聊天交换模式

既然你提到哇,他们使用的是UDP而不是TCP。TCP提供流保证语义,具有顺序保证和无重复。但要实现这一点,就延迟而言,要付出沉重的代价。像《魔兽世界》这样的游戏对延迟更感兴趣,而不关心订单保证:最新的数据包总是最好的,并取代以前的任何数据包信息

表面下还隐藏着更多的问题:

  • 出站防火墙遍历(HTTP几乎总是允许的)
  • 读取和理解HTTP头的入侵代理
  • 入站NAT遍历问题
最后还有一个问题,你刚才问的是:TCP套接字限制。它们取决于每个操作系统。例如,由于TCP端口耗尽,典型的开箱即用Windows服务器将在大约1000个TCP套接字处阻塞。它必须是具体的。即使经过调整,它也很难接近64K的开放式、可正常工作的插槽。对于需要连接到数百万客户端的服务器,连接必须由中间层多路复用,并且消息传递协议必须准备好处理转发(最重要的是消息顺序反转)所产生的问题


这个问题空间很大,每座桥下都有许多龙。

感谢您的回复。关于端口耗尽的示例似乎更适用于耗尽可用于通信的“返回端口”数量的客户端计算机,而不是承载在单个端口上的服务器。接受套接字不同于侦听套接字。服务器会耗尽端口,而且速度很快。谢谢,拉杰。我认为,在评估这两种选择时,关于发送的消息数量和大小的重要性,您是对的。我还认为你说的对,从传输方法和协议的角度来看,这个问题是模糊的。