0

我为这个蹩脚的标题道歉,但在努力寻找更好的标题后 15 分钟,我干脆放弃了。
想象以下场景:

  • 用 C# 编写的桌面应用程序A会监听用户讲话,并在讲话发生时WAV将文件转换为块 ( byte[])
  • A然后需要将这些块发送到服务器B(我们的 Windows 服务器),因为语音仍在发生
  • 服务器B等待所有块到达(在语音完成后),然后转身向服务器C(第 3 方语音到文本识别引擎)发出一个 HTTP POST,其中包含语音的完整byte[]表示
  • 服务器B获取响应并对生成的字符串进行一些处理,然后将对象发送回桌面应用程序A(可以是字符串或图像)

其中一项要求(粗体声明)是,为了提高效率,A不应等待语音完成后才开始将块发送到B.

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

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

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

4

2 回答 2

0

我编写了一个网络库,它为您处理所有血腥的网络细节(它快速且异步)。

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

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

于 2012-06-05T11:01:03.573 回答
0

我可以考虑进行一些更改,我认为这将提高客户端/服务器的性能。

首先,不要发送byte[]from AtoB并等待发送所有块,而是发送byte[]from AtoC然后等待发送所有数据包。


这是一个应该有帮助的图表:

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。所以发送更少的数据包=更快的响应。

希望这对您有所帮助或给您一个想法!

于 2012-06-02T03:44:36.700 回答