我为蹩脚的头衔道歉但是在15分钟努力寻找更好的头衔后,我只是放弃了。
想象一下以下场景:
A
会监听用户说话,并在发言时将WAV
文件转换为块(byte[]
) A
然后需要将这些块发送到服务器B
(我们的Windows服务器),因为语音仍在发生 B
等待所有块到达(语音完成后),然后转身并向服务器C
(第三方语音到文本重新引擎)发出一个HTTP POST演讲的全部byte[]
表示B
获取响应并对结果字符串执行一些操作,然后将对象发送回桌面应用A
(可能是字符串或图像)其中一个要求(粗体语句)是,为了提高效率,A
不应等待语音完成,然后再开始将块发送到B
。
我们整合了一个使用TCP套接字的测试解决方案(似乎工作正常),但由于我们使用套接字的经验很少,我们有点不情愿(不确定所有限制)。
有没有更好的建议来实现我们的目标?
PS:还需要确认的另一个要求可能是A
用“非托管”C ++编写,这可能会阻止任何纯粹的.NET实现(如WCF的双工服务?)
答案 0 :(得分:0)
我可以想到要做一些改变,我认为它会提高客户端/服务器的性能。
首先,您应该从byte[]
发送A
,而不是将B
从byte[]
发送到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/