【发布时间】:2014-12-06 12:24:32
【问题描述】:
我在我的 Vala 应用程序中使用 libsoup 从 Instagram API 获取数据。但是从中加载一个页面大约需要 10 秒(而浏览器在大约 1-2 秒内显示相同的页面)。我最初认为这是因为 HTTPS(HTTPS 页面加载的时间比 HTTP 页面长),但我发现大多数情况下它可以解决我的问题。
所以,问题是:有什么方法可以缓存 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;
}
而且加载的大部分时间都在“RESOLVING”和“RESOLVED”之间。
顺便说一句,我认为在 GSettings 中设置一些字段来存储 Instagram API 服务器 IP 并将主机的主机名替换为该 IP 地址是个好主意,这可行吗?如果可以,如何实现?
【问题讨论】:
标签: caching https dns vala http-caching