我创建了Chrome扩展程序,并使用Native Messaging连接到C ++本机应用程序。 但是对于Chrome扩展程序发送到本机主机的每条消息,都会创建一个新的主机exe实例.exe实例在向chrome javascript扩展名发送消息后退出。因为许多消息将被发送到主机,所以效率很低。 现在,我构建了一个计划,通过使用存储端口值的全局值和exe宿主运行while循环来保持长期连接。但是有一些问题。 chrome扩展javascript代码:我使用全局g_port来保存端口。
function connect(){
g_port = chrome.runtime.connectNative("com.qq.qqpcmgr");
if(g_port!=null)
{
g_port.onMessage.addListener(onNativeMessage);
g_port.onDisconnect.addListener(onDisconnected);
return g_port;
}
return null;
}
每条消息的发送方式如下:g_port.postMessage({text:“Hello,my_application”}); //转到同一个实例 g_port.postMessage({text:“P.S。我也想说这个”});
exe主机代码:
Loop:
//read msg
string json;
int nSize = 0;
std::cin.read((char*)&nSize,4);
json.resize(nSize);
std::cin.read(&json[0], nSize );
string strMsg;
//do something
//send message
std::string message ;
unsigned int len = message.length();
std::cout << char(((len>>0) & 0xFF))
<< char(((len>>8) & 0xFF))
<< char(((len>>16) & 0xFF))
<< char(((len>>24) & 0xFF));
std::cout << message;
goto Loop;
扩展无法在第二次循环后接收主机发送的消息。对于扩展程序发送的某些消息,主机无法获得正确的值但是空格。