实现“即时”客户端 - 服务器通信的最佳解决方案?

时间:2012-06-02 03:00:47

标签: c# .net sockets

我为蹩脚的头衔道歉但是在15分钟努力寻找更好的头衔后,我只是放弃了。
想象一下以下场景:

  • 用C#编写的桌面应用A会监听用户说话,并在发言时将WAV文件转换为块(byte[]
  • A然后需要将这些块发送到服务器B(我们的Windows服务器),因为语音仍在发生
  • 服务器B等待所有块到达(语音完成后),然后转身并向服务器C(第三方语音到文本重新引擎)发出一个HTTP POST演讲的全部byte[]表示
  • 服务器B获取响应并对结果字符串执行一些操作,然后将对象发送回桌面应用A(可能是字符串或图像)

其中一个要求(粗体语句)是,为了提高效率,A不应等待语音完成,然后再开始将块发送到B

我们整合了一个使用TCP套接字的测试解决方案(似乎工作正常),但由于我们使用套接字的经验很少,我们有点不情愿(不确定所有限制)。

有没有更好的建议来实现我们的目标?

PS:还需要确认的另一个要求可能是A用“非托管”C ++编写,这可能会阻止任何纯粹的.NET实现(如WCF的双工服务?)

2 个答案:

答案 0 :(得分:0)

我可以想到要做一些改变,我认为它会提高客户端/服务器的性能。

首先,您应该从byte[]发送A,而不是将Bbyte[]发送到A并等待发送所有块。 } C然后它等待所有数据包发送。

<小时/> 这是一个应该有用的图表:

A -> C (waits for all packets) -> B (does some stuff to the string) -> A

<小时/> 如果您不需要服务器B,那么您可以执行以下操作:

A -> C (waits for all packets, then does some stuff to the string) -> A

<小时/> 以下是您目前正在做的事情:

A -> B (waits for all packets) -> C -> B (does some stuff to the string) -> A

第一个想法是你只发送3次数据包,第二个想法只有2次你的实现,你发送数据包4次。虽然发送数据包的次数在所有情况下都无关紧要,但我认为它会在这一次因为你需要它on-the-fly。所以发送更少的数据包=更快的响应。

希望这会有所帮助或给你一个想法!

答案 1 :(得分:0)

我已经编写了一个网络库,可以为您处理所有的网络细节(快速且异步)。

您所要做的就是管理发送/接收的信息。

以下是介绍: http://blog.gauffin.org/2012/05/griffin-networking-a-somewhat-performant-networking-library-for-net/