【问题标题】:How to keep long-lived connections between a Chrome extension and a native messaging host?如何在 Chrome 扩展程序和本机消息传递主机之间保持长期连接?
【发布时间】:2014-08-12 09:39:19
【问题描述】:

我创建了一个 Chrome 扩展程序并使用 Native Messaging 连接到 C++ 本机应用程序。

但是对于 Chrome 扩展发送到本机主机的每条消息,都会创建一个新的主机 exe 实例。我认为它效率不高,因为我向主机发送了很多消息。

Chrome 扩展程序和本机消息传递主机之间是否存在长期连接方法?

【问题讨论】:

  • 包含您的代码以连接到本机主机怎么样?

标签: google-chrome-extension chrome-native-messaging


【解决方案1】:

如果您使用chrome.runtime.sendNativeMessage 发送消息,或者为每条消息创建一个带有chrome.runtime.connectNative 的新端口对象,那么是的,这是低效的。

chrome.runtime.connectNative 的目的是创建和维护一个开放的消息端口,您可以重复使用该端口。只要您的本地主机以 Chrome 期望的方式运行并且不关闭连接本身,它就会是一个长期存在的连接。

function connect(messageHandler, disconnectHandler){
  var port = chrome.runtime.connectNative('com.my_company.my_application');
  if(disconnectHandler) { port.onDisconnect.addListener(disconnectHandler); }
  if(messageHandler) { port.onMessage.addListener(messageHandler); }
  return port;
}

var hostPort = connect(/*...*/);
port.postMessage({ text: "Hello, my_application" });

// Goes to the same instance
port.postMessage({ text: "P.S. I also wanted to say this" });

// If you want to explicitly end the instance
port.disconnect();

【讨论】:

  • 感谢您的回答。但是本地人应该如何从主机获取每条消息?我尝试了一种使本机主机使用while循环从stdin获取消息的方法,它不起作用。期待您的回答。
  • 重新表述您的问题或提出另一个问题,因为从这个问题中不清楚您是否需要本地主机方面的帮助。描述你尝试了什么。在这方面有比我更好的专家。
猜你喜欢
  • 2016-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多