2016-03-10 2 views
0

У меня работает клиент веб-службы, который мы разработали с использованием библиотеки gsoap, и нам нужно отправить 3,5 ГБ данных через взаимно аутентифицированное соединение - это означает, что у нас есть зашифрованный трафик в сети. На сервере, к которому у меня нет доступа, говорится, что он получает «пустые» данные. Я сделал захват сетевого трафика и заметил паузу (несколько секунд) во время передачи, а затем «Зашифрованное оповещение (21)» и закрытие соединения.Как проверить, не выдает ли gsoap сериализацию/отправку большого количества данных?

Проверка моего кода кажется, что есть некоторые проблемы для сериализации или отправки данных, но я не смог точно узнать, что происходит.

Мое подозрение, что gsoap не может выделить необходимую память для сериализации/отправки данных.

Как я должен анализировать это?

EDIT1: Я отбросил сериализованный след, и теперь мое подозрение находится в функциях вложения. Кажется, что определение обратных вызовов приложения может решить мою проблему. Все еще интересуются мнениями и предложениями людей.

ответ

0

Из вашего описания кажется менее вероятным, что сериализация XML является причиной проблемы. Стандартная HTTP-связь в gsoap (т. Е. Без HTTP-chunking) сериализует данные C/C++ перед отправкой для определения длины HTTP-содержимого. Сбой сериализации появится сразу, а не во время передачи.

Чтобы ускорить передачу больших XML-фрагментов данных, вы можете оптимизировать сериализацию XML с помощью флага контекста SOAP_XML_TREE, чтобы инициализировать контекст struct soap. Это существенно снижает SOAP-кодирование. Позвольте мне объяснить, почему это так: протокол кодирования SOAP 1.1/1.2 берет накладные расходы в механизме gsoap, чтобы определить элементы со ссылками, анализируя указатели структуры данных (например, графики, возможно, с циклами). Когда используется множество указателей, это может повлиять на производительность сериализатора XML. Кроме того, режим отладки (-DDEBUG) существенно замедлит двигатель gsoap, поэтому лучше избегать больших передач.

Возможно, такой инструмент, как ssldump, может пролить свет на проблему связи TLS/SSL, с которой вы столкнулись.

+0

Я проверю этот ssldump. Что касается производительности, кажется, моя проблема не в том, что она медленная, а скорее не в состоянии отправлять данные вообще. Все еще думайте, что это что-то связано с сбоем памяти, возможно, связано с вложениями. Другой вариант - это некоторая неудача поиска (я заметил, что различные поисковые запросы памяти происходят в функциях кода привязки gsoap). – Salsa