如何在Chrome扩展和本机消息主机之间建立长期连接? < >我创建了一个Chrome扩展,并使用本地消息连接到C++本地应用程序。 但对于Chrome扩展发送到本机主机的每一条消息,都会创建一个新的主机exe实例。exe实例在向Chrome javascript扩展发送消息后退出。这是低效的,因为许多消息都会发送到主机。 现在,我通过使用存储在端口值和exe主机运行时循环中的全局值来构建一个保持长期连接的计划。但也存在一些问题。 chrome扩展javascript代码:我使用全局g_端口来保存端口 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; }

如何在Chrome扩展和本机消息主机之间建立长期连接? < >我创建了一个Chrome扩展,并使用本地消息连接到C++本地应用程序。 但对于Chrome扩展发送到本机主机的每一条消息,都会创建一个新的主机exe实例。exe实例在向Chrome javascript扩展发送消息后退出。这是低效的,因为许多消息都会发送到主机。 现在,我通过使用存储在端口值和exe主机运行时循环中的全局值来构建一个保持长期连接的计划。但也存在一些问题。 chrome扩展javascript代码:我使用全局g_端口来保存端口 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; },javascript,c++,google-chrome-extension,Javascript,C++,Google Chrome Extension,每个消息都是这样发送的: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], nSiz

每个消息都是这样发送的: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;

在第二次循环后,扩展无法接收主机发送的消息。对于扩展发送的某些消息,主机无法获取正确的值,只能获取空白

什么消息作为答案被发回?尝试侦听Chrome中的断开连接事件,以确保Chrome不会关闭其一侧的端口。感谢您的回复。经过多次尝试和调试,我已经解决了这个问题。