Собственный обмен сообщениями Chrome не закрывается при закрытии хрома

Я сделал хром-хост для передачи собственных сообщений между моим расширением и моим процессом, мой процесс запускается, когда хром запускается, но не закрывается, когда я закрываю хром, должен ли я добавить параметр в манифест хоста или я должен добавить обработку моего процесса, чтобы закрыть процесс, когда хром закрылся?

Благодарю.


person shacharsa    schedule 13.01.2014    source источник
comment
Какой язык вы используете? Не могли бы вы опубликовать код?   -  person bkdc    schedule 23.01.2014


Ответы (2)


Вы не предлагаете много подробностей, но я могу ответить на некоторые ваши вопросы: - не нужно добавлять "параметр" в манифест; такого параметра нет - не нужно определять из вашего процесса, когда Chrome закрывается

Chrome запускает свой собственный хост обмена сообщениями всякий раз, когда вы отправляете ему сообщение или, если вы используете долгоживущее соединение, когда вы открываете соединение. Приложение должно закрываться, когда закрывается поток STDIN (проще говоря, вы больше не можете читать со стандартного ввода).

Для однопоточного приложения процесс выглядит следующим образом: 1. Чтение запроса из стандартного ввода 2. Обработка запроса 3. Запись ответа на стандартный вывод; Повторяйте 1-3 до тех пор, пока вы можете читать со стандартного ввода; если вы не можете читать со стандартного ввода, разорвите цикл и выйдите.

    std::string req;
while(!(req=read_request()).empty())
{
       //process request and send response
}

read_request зависит от вас: первые 4 байта запроса содержат длину сообщения, поэтому сначала прочитайте эти 4 байта, а затем прочитайте len байтов, которые содержат фактический запрос JSON. Если вы ничего не можете прочитать (пусто), цикл while прерывается, и вы выходите из приложения.

person bkdc    schedule 23.01.2014
comment
Превосходно. Спасибо bkdc. - person cjones26; 25.02.2015

Основываясь на ответе bkdc;

если вы используете функцию библиотеки C - getchar(), это должно работать;

unsigned int c = getchar();
if (c == 0xFFFFFFFF){//this means native app finished its work
        return 0;
}
person myuce    schedule 07.09.2015