gpt4 book ai didi

javascript - native 应用程序和 chrome-extension 之间的连接在一段时间后中断

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:02 25 4
gpt4 key购买 nike

我正在使用 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.hio.h

关于javascript - native 应用程序和 chrome-extension 之间的连接在一段时间后中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21452483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com