如何在Chrome扩展程序和本机消息传递主机之间建立长期连接?

时间:2014-08-13 12:33:25

标签: javascript c++ google-chrome-extension

我创建了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;

扩展无法在第二次循环后接收主机发送的消息。对于扩展程序发送的某些消息,主机无法获得正确的值但是空格。

0 个答案:

没有答案