Модифицируйте непотоковое приложение с помощью многопоточного веб-сервера.

У меня есть существующее встроенное приложение c ++ (ARM) с непоточным веб-сервером. Используется так:

main(){
while(1){
doIO();
doProcess1();
doProcess2();
etc...
webServer.poll();
}
}

WebServer.poll () обслуживает страницы из базового каталога и вызывает одну из моих функций, если URL содержит определенный шаблон, поэтому он может отвечать на вызов rpc, который часто читает или записывает на SD-карту.

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

Civetweb, кажется, отвечает моим требованиям и работает нормально, но он имеет резьбу (1 на соединение).

Мой вопрос заключается в том, что, поскольку перезапись всего существующего кода для обеспечения безопасности потоков не является вариантом, было бы нормально сделать что-то подобное с глобальным «threadLock»?

main(){
startThreadedWebServer();
while(1){
pthread_mutex_lock(&threadLock);
doIO();
doProcess1();
doProcess2();
etc...
pthread_mutex_unlock(&threadLock);
sleep(0.1); //give webServer some time to get the lock
}
}

А затем в функции RPC:

pthread_mutex_lock(&threadLock);
doRpcCode()
pthread_mutex_unlock(&threadLock);

Сервер может обслуживать обычные страницы в потоке, но любые вызовы rpc будут заблокированы.

Я делаю это сейчас, и это работает, но я не знаю, есть ли потенциальные проблемы. Это приложение обычно имеет 1 пользователя, может быть не более 3, с вызовами rpc каждые несколько секунд. Скорость на самом деле не проблема.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector