我正在使用 chrome 本机消息传递 api 在我的 chrome-extension 和用 c++ 编写的 native-windows-app 之间进行通信。
连接建立良好,数据也得到交换。但是,在从扩展程序对本机应用程序进行随机数量的调用后,连接就会中断。
我尝试独立运行本机应用程序,并且在无限循环中运行时工作正常(没有异常发生)。
我的本机应用程序在第一次调用时生成近 300KB 的数据(编码帧()),然后连续调用(每 300 毫秒)生成 0 到 300KB 的数据(编码帧差异())。数据采用 Base64 编码。
仅供参考:本机应用程序和扩展之间通过 stdin 和 stdout 进行通信。
问题是我无法弄清楚为什么连接在一段时间后会中断。
这里是本机应用程序代码:
windows-native-app-cpp http://pastebin.com/bitGSpEw
这里是扩展代码:
chrome 扩展 js http://pastebin.com/fLtQTxCC
任何帮助,将不胜感激!
谢谢。
EDIT:
到目前为止,我发现我发送的某些长度的数据存在问题。
例如。如果 JSON 长度在 2560 到 2815 之间,它将停止工作。而对于像 2816 或 6656 这样的 JSON 长度它是有效的。
我从 chromium-extension 小组得到了这个,它对我有用。
粘贴完全相同:
问题可能出在包含四字节长度的消息的标头中。如果很奇怪,Chrome 就会中断连接。由于 stdout 默认处于文本模式,因此某些 ASCII 字符可能会在 Windows 上转换为不同的字符,例如 \n 变为 \r\n。最终标头中的字节数超出了您的需要,因此 Chrome 扩展程序会认为您正在发送数百万字节的数据,从而感到困惑并中断连接,并且某些标头字节会渗入消息中,从而导致JSON 解析器遇到意外字符。
尝试将 stdout 设置为二进制模式:
_setmode(_fileno(stdout), _O_BINARY);
如果这没有帮助,您还可以尝试这种写入标准输出的替代方法:
unsigned int len = final_msg.length();
fwrite(&len, 4, 1, stdout);
printf("%s", final_msg.c_str());
fflush(stdout);
您可能需要添加一些包含:
fcntl.h
io.h
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)