Я использую libsoup в своем приложении Vala для получения данных из API Instagram. Но для загрузки одной страницы требуется около 10 секунд (в то время как браузер отображает одну и ту же страницу в ~ 1-2 секунды). Сначала я думал, что это связано с тем, что HTTPS (страницы HTTPS загружают путь дольше, чем страницы HTTP), но я понял, что большую часть времени он разрешает мою самую большую часть.Как кэшировать DNS в libsoup в Вала?
Итак, вопрос в том, есть ли способ кэшировать результаты DNS, чтобы не разрешать хост каждый раз, когда мне нужно подключение к нему? Или это возможно?
Вот функция, я использую:.
public string getResponse (string host)
{
var session = new Soup.Session();
session.ssl_strict = false;
session.user_agent = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
var message = new Soup.Message ("GET", host);
message.tls_errors = GLib.TlsCertificateFlags.VALIDATE_ALL;
message.network_event.connect((event) => {
if (event == SocketClientEvent.RESOLVING) print("RESOLVING\n");
if (event == SocketClientEvent.RESOLVED) print("RESOLVED\n");
if (event == SocketClientEvent.CONNECTING) print("CONNECTING\n");
if (event == SocketClientEvent.CONNECTED) print("CONNECTED\n");
if (event == SocketClientEvent.PROXY_NEGOTIATING) print("PROXY_NEGOTIATING\n");
if (event == SocketClientEvent.PROXY_NEGOTIATED) print("PROXY_NEGOTIATED\n");
if (event == SocketClientEvent.TLS_HANDSHAKING) print("TLS_HANDSHAKING \n");
if (event == SocketClientEvent.TLS_HANDSHAKED) print("TLS_HANDSHAKED\n");
if (event == SocketClientEvent.COMPLETE) print("COMPLETE\n");
});
print("start sending\n");
session.send_message (message);
print("stop sending\n");
return (string) message.response_body.data;
}
и большую часть времени загрузки между «разрешающего» и «ПОСТАНОВИЛИ
Btw, я подумал, что это хорошая идея, чтобы установить какое-то поле в GSettings для хранения IP-адреса сервера Instagram API и замены имени хоста на этот IP-адрес будет работать? И если это произойдет, то как его реализовать?
Теперь, когда instagram изменяет свой IP-адрес, ваш код больше никогда не будет работать ... Не отличное решение. Возможно, было бы более полезно попытаться выяснить, почему ваш DNS настолько медленный: я уверен, что libsoup просто использует GIO, который по сути вызывает вызов getaddrinfo(), и по какой-то причине ваша операционная система занимает очень много времени, чтобы решить адрес. – jku
Я знаю, я думаю, что я обработаю это позже. Странная вещь: http://api.instagram.com решает быстро, и https://api.instagram.com решает очень медленно, хотя IP-адрес тот же, я думаю. – serge1peshcoff
@jku btw, можете ли вы предложить мне, как это понять? Я попытался использовать libcurl вместо libsoup (я читал это быстрее), и у него был тот же результат, поэтому я думаю, что это не проблема библиотеки. – serge1peshcoff