优化查询性能
This commit is contained in:
@@ -39,8 +39,12 @@ func NewDNSServer(port int, upstreamDNS string) *DNSServer {
|
|||||||
UseDoH: false,
|
UseDoH: false,
|
||||||
queries: make(map[string]*DNSQuery),
|
queries: make(map[string]*DNSQuery),
|
||||||
httpClient: &http.Client{
|
httpClient: &http.Client{
|
||||||
Timeout: 5 * time.Second,
|
Timeout: 3 * time.Second,
|
||||||
Transport: &http.Transport{
|
Transport: &http.Transport{
|
||||||
|
MaxIdleConns: 100,
|
||||||
|
MaxIdleConnsPerHost: 100,
|
||||||
|
IdleConnTimeout: 90 * time.Second,
|
||||||
|
TLSHandshakeTimeout: 2 * time.Second,
|
||||||
TLSClientConfig: &tls.Config{
|
TLSClientConfig: &tls.Config{
|
||||||
InsecureSkipVerify: false,
|
InsecureSkipVerify: false,
|
||||||
},
|
},
|
||||||
@@ -57,8 +61,14 @@ func NewDNSServerWithDoH(port int, dohURL string) *DNSServer {
|
|||||||
DoHURL: dohURL,
|
DoHURL: dohURL,
|
||||||
queries: make(map[string]*DNSQuery),
|
queries: make(map[string]*DNSQuery),
|
||||||
httpClient: &http.Client{
|
httpClient: &http.Client{
|
||||||
Timeout: 5 * time.Second,
|
Timeout: 3 * time.Second,
|
||||||
Transport: &http.Transport{
|
Transport: &http.Transport{
|
||||||
|
ForceAttemptHTTP2: true,
|
||||||
|
MaxIdleConns: 100,
|
||||||
|
MaxIdleConnsPerHost: 100,
|
||||||
|
IdleConnTimeout: 90 * time.Second,
|
||||||
|
TLSHandshakeTimeout: 2 * time.Second,
|
||||||
|
DisableCompression: false,
|
||||||
TLSClientConfig: &tls.Config{
|
TLSClientConfig: &tls.Config{
|
||||||
InsecureSkipVerify: false,
|
InsecureSkipVerify: false,
|
||||||
},
|
},
|
||||||
@@ -153,7 +163,7 @@ func (s *DNSServer) forwardQueryUDP(query []byte) ([]byte, error) {
|
|||||||
defer upstreamConn.Close()
|
defer upstreamConn.Close()
|
||||||
|
|
||||||
// 设置超时
|
// 设置超时
|
||||||
upstreamConn.SetDeadline(time.Now().Add(5 * time.Second))
|
upstreamConn.SetDeadline(time.Now().Add(3 * time.Second))
|
||||||
|
|
||||||
// 发送查询
|
// 发送查询
|
||||||
_, err = upstreamConn.Write(query)
|
_, err = upstreamConn.Write(query)
|
||||||
@@ -276,8 +286,8 @@ func (s *DNSServer) recordQuery(domain, queryType string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 限制缓存大小
|
// 限制缓存大小,防止内存溢出
|
||||||
if len(s.queries) > 200 {
|
if len(s.queries) > 500 {
|
||||||
// 删除最旧的条目
|
// 删除最旧的条目
|
||||||
oldestKey := ""
|
oldestKey := ""
|
||||||
oldestTime := time.Now()
|
oldestTime := time.Now()
|
||||||
|
|||||||
Reference in New Issue
Block a user