4

我正在使用chrome本機消息api在我的chrome擴展和用C++編寫的native-windows-app之間進行通信。在native-app和chrome-extension之間經過一段時間之後的連接斷開

連接設置精細,數據也被交換。但是在隨機數量的呼叫從擴展到本地應用之後,連接中斷。

我試着獨立運行native-app,並且在無限循環中運行時沒有異常(沒有發生異常)。

我的本機應用程序在第一呼叫(encode_frame()),然後連續調用(每300毫秒)由產生0到數據的300KB(encode_frame_difference())生成幾乎300KB的數據。數據是base64編碼的。

僅供參考:通過標準輸入和標準輸出在native-app和擴展之間進行通信。

問題是我無法弄清爲什麼連接會在一段時間後中斷。

這裏是本機應用程序代碼windows-native-app-cpp

這裏是擴展代碼chrome-extension-js

任何幫助,將不勝感激!

謝謝。

編輯: 到目前爲止,我發現我發送的某些數據長度存在問題。

例如。如果JSON長度在2560和2815之間,則停止工作。而JSON長度像2816或6656它的作品。

回答

4

我從鉻擴展組得到這個,它爲我工作。

粘貼完全相同的:

的問題是可能在包含消息的四字節長度的報頭。如果它很奇怪,Chrome會中斷連接。由於缺省情況下stdout處於文本模式,某些ASCII字符可能會在Windows上轉換爲不同的字符,例如\ n變爲\ r \ n。您最終會在頭部添加比您需要的更多字節,因此Chrome擴展程序會認爲您正在發送數百萬字節的數據,感到困惑並斷開連接,並且一些標題字節流入消息,導致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

相關問題