我正在使用 chrome native messaging api 在我的 chrome-extension 和用 c++ 编写的 native-windows-app 之间进行通信。
连接建立良好,数据也得到交换。但是在从扩展到 native 应用程序进行随机数量的调用后连接中断。
我尝试独立运行 native-app,在无限循环中运行时它工作正常(没有发生异常)。
我的本机应用程序在第一次调用 (encode_frame()) 时生成近 300KB 的数据,然后连续调用(每 300 毫秒)生成 0 到 300KB 的数据(encode_frame_difference ()).数据采用 base64 编码。
仅供引用: native 应用程序和扩展程序之间通过标准输入和标准输出进行通信。
问题是我无法弄清楚为什么连接会在一段时间后中断。
这是 native 应用程序代码: windows-native-app-cpp
这是扩展代码: chrome-extension-js
如有任何帮助,我们将不胜感激!
谢谢。
编辑: 直到现在我发现我发送的特定长度的数据有问题。
例如。如果 JSON 长度在 2560 到 2815 之间,它将停止工作。而对于像 2816 或 6656 这样的 JSON 长度,它是有效的。
最佳答案
我从 chromium-extension group 得到了这个,它对我有用。
粘贴完全相同的内容:
问题可能出在包含消息的四字节长度的 header 中。如果很奇怪,Chrome 会断开连接。由于 stdout 默认处于文本模式,某些 ASCII 字符可能会在 Windows 上转换为不同的字符,例如\n 变为\r\n。您最终会在 header 中获得比您需要的字节更多的字节,因此 Chrome 扩展程序会认为您正在发送数百万字节的数据,感到困惑并中断连接,一些 header 字节会渗入消息中,从而导致JSON 解析器遇到意外字符。
尝试将标准输出设置为二进制模式:
_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
关于javascript - native 应用程序和 chrome-extension 之间的连接在一段时间后中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21452483/