2014-09-09 4 views
0

스택 오버플로가 발생하여 Chrome 확장 프로그램에서 네이티브 (C++) 앱으로 메시지를 보낼 수있었습니다. 네이티브 호스트 앱이 메시지를 받으면 응답 데이터를 반환 할 수 있습니다. 그러나 이는 확장 프로그램에서 데이터를 수신하는 네이티브 응용 프로그램에 대한 응답입니다. 또한 확장 프로그램에서 보낸 메시지는 동기가 아니므로 확장 프로그램은 호스트 응용 프로그램의 응답을 기다리지 않습니다.호스트 앱에서 크롬 확장 프로그램으로 메시지 시작

내 요구 사항은 기본 앱에서 통신 연결을 시작하는 것입니다. 즉, 기본 앱이 주기적으로 Chrome 확장 프로그램에 업데이트를 보냅니다. 네이티브 앱에서 메시지를 전송하고 해당 크롬 확장 프로그램으로 전달하는 메커니즘이 있습니까?

기본적으로 다음을 얻고 싶습니다. webRequest.OnBeforeSendHeaders와 같은 이벤트에 메시지를 게시하고 싶습니다. 메시지에 대한 응답으로 URL 요청을 차단해야하는지 결정하고 싶습니다. 응답의 수신이 콜백 일 경우, 이것은 대부분 다른 스레드에 있으며 webRequest.OnBeforeSendHeaders 스레드에서 응답을 기다릴 수 없습니다. 네이티브 앱이 내 요청에 응답 할 때까지 기다리는 동안 webRequest.OnBeforeSendHeaders를 일시 중지 할 수있는 방법이 있습니까? 또는 webRequest.OnBeforeSendHeaders가 네이티브 앱이 응답했는지 확인하기 위해 메시지 버퍼 (루프)를 들여다 볼 수 있습니까?

또는이를위한 다른 방법이 있습니까?

+0

실제로 비동기 콜백 문제가 발생하고있는 것으로 보입니다. 나는 많은 해킹이 없이는 가능하지 않다고 여기에서 토론을 참조하십시오 : http://stackoverflow.com/questions/15124995/how-to-wait-for-an-asynchronous-methods-callback-return-value –

+0

이것은 이제 매우 다른 질문입니다. ** 둘 다하십시오 : ** 1) 편집을 롤백하십시오, 2) 다른 질문을하십시오. – Xan

답변

1

크롬의 어떤 것도 동기가 아닙니다. 이것이 크롬이 얼어 붙지 않는 이유 중 하나입니다. 하지만 그건 문제가 아닙니다. 비동기 코드로도 원하는 것을 쉽게 얻을 수 있습니다. 이는 단지 따라야 만하는 또 다른 패턴입니다.

네이티브 앱 진행 방법에 대한 설명은 여기 https://developer.chrome.com/extensions/messaging#native-messaging입니다. type-parameter에 예를 들어 stdio을 전달할 수 있다고 설명합니다. 그런 다음 앱에 데이터를 보낼 때마다 Chrome은 stdin에 글을 씁니다. stdout (C++의 경우 : cout을 통해 인쇄)을 사용하여 메시지를 다시 보낼 수 있습니다 (즉, 무언가에 대한 응답). 기본 앱에서 네이티브 앱이 실제로 Chrome 기본 앱임을 알 필요가 없습니다. stdin에서 데이터를 수신하고 stdout을 통해 데이터를 전송한다는 것을 알아야합니다.

+0

크롬에서 비동기적인 모든 것에 대해 무엇을 말하고 있는지 이해합니다. 효율적이지만 다음과 같은 이유로 인해 문제가 발생합니다. – Sri

+0

webRequest.OnBeforeSendHeaders와 같은 이벤트에 메시지를 게시하고 메시지에 대한 응답으로 URL 요청을 차단해야하는지 결정합니다. 응답의 수신이 콜백 일 경우, 이것은 대부분 다른 스레드에 있으며 webRequest.OnBeforeSendHeaders 스레드에서 응답을 기다릴 수 없습니다. 네이티브 앱이 내 요청에 응답 할 때까지 기다리는 동안 webRequest.OnBeforeSendHeaders를 일시 중지 할 수있는 방법이 있습니까? 또는 webRequest.OnBeforeSendHeaders가 네이티브 앱이 응답했는지 확인하기 위해 메시지 버퍼 (루프)를 들여다 볼 수 있습니까? – Sri

+0

질문에이 종류의 텍스트를 포함해야합니다. 내 말은, 당신이 얻고 자하는 것을 말하면서 어떻게 말 할까 ?-) 질문으로 돌아가는 것 : 실제로 당신은 비동기식 콜백 문제를 겪고있는 것처럼 보입니다. 나는 그것이 해킹이 없으면 가능하다고 생각하지 않는다. 토론을 여기서 보자 : http://stackoverflow.com/questions/15124995/how-to-wait-for-an-asynchronous-methods-callback-return-value –

0

의도적으로 네이티브 앱에서 연결을 시작할 수 없습니다.

열려있는 모든 포트에 대해 Chrome은 앱의 인스턴스를 시작합니다. 앱이 업데이트를 보내려면 Chrome 측에서 포트를 열고 공개 상태로 유지해야합니다.

관련 문제