Я провел несколько базовых тестов с использованием Apache Benchmark, и похоже, что публикация 500 записей из C # с использованием класса DeflateStream
в PHP приводит к примерно 3-кратному увеличению скорости обработки и уменьшению полосы пропускания со 140 до 10 КБ только с дополнительными 2 % Увеличения ЦП на пост.
Сейчас я пытаюсь обновить мои существующие конечные точки API, чтобы, если старые соединители по-прежнему отправляли несжатые данные, они не ломались, но обновленные соединители, отправляющие сжатые данные, автоматически распаковывались. Хотя у меня есть доказательство концепции на простом PHP, с Laravel, но я не уверен, как объединить его с классом Request
. Вот как начинается мой API:
public function BasicApi(Request $request)
{
$messages = [
];
$validator = Validator::make($request->all(), [
'data' => 'required|array',
], $messages);
if ($validator->fails()) {
throw new UpdateResourceFailedException('Could not sync.', $validator->errors());
}
$reference_id = collect($request->input('data'))->pluck('reference_id');
........ more stuff ........
}
С прямым PHP я смог найти способ фильтрации, был ли входящий код сжат или нет:
$incomingData = gzinflate(file_get_contents('php://input'));
if (file_get_contents('php://input') != $incomingData && $incomingData !== FALSE) {
$incomingData = gzinflate(file_get_contents('php://input'));
}
echo $source;
Что я должен сделать, чтобы иметь возможность отправлять сжатые данные Laravel API? Если я позволю Apache распаковать его автоматически, тогда все запросы будут экранированы следующим образом:
"{\"data\":[{\"reference_id\":\"75080\"...
Если я не позволю ему сделать это автоматически, то я не уверен, как внедрить входящее в Request
объект.