changeset 3:4207d32497e2

Enhance client performance too
author Lewin Bormann <lbo@spheniscida.de>
date Thu, 01 Oct 2020 12:09:02 +0200
parents 9cb09adb4740
children 0a6f3af05763
files client/client.go
diffstat 1 files changed, 22 insertions(+), 13 deletions(-) [+]
line wrap: on
line diff
--- a/client/client.go	Thu Oct 01 12:03:33 2020 +0200
+++ b/client/client.go	Thu Oct 01 12:09:02 2020 +0200
@@ -2,15 +2,15 @@
 
 import (
 	"flag"
+	"fmt"
 	"log"
 	"net"
 	"strconv"
 
-	"golang.org/x/net/dns/dnsmessage"
-
 	"github.com/dermesser/clusterrpc/client"
 	rpclog "github.com/dermesser/clusterrpc/log"
 	"github.com/dermesser/clusterrpc/securitymanager"
+	"golang.org/x/net/dns/dnsmessage"
 )
 
 func extractQueryHost(pkg []byte) (string, error) {
@@ -36,10 +36,12 @@
 type dnsclient struct {
 	rpccl    *client.Client
 	listener *net.UDPConn
+	n        int
 }
 
 func (dc *dnsclient) run() {
 	pkg := make([]byte, 1500)
+	log.Println("Resolver", dc.n, "ready")
 
 	for {
 		sz, from, err := dc.listener.ReadFrom(pkg)
@@ -47,14 +49,13 @@
 			log.Print(err)
 			continue
 		}
-		log.Println("Received", sz, "bytes from", from)
 
 		hosts, err := extractQueryHost(pkg[0:sz])
 		if err != nil {
 			log.Print(err)
 			continue
 		}
-		log.Print(hosts)
+		log.Println("Resolver", dc.n, "resolving", hosts)
 
 		resp, err := dc.rpccl.Request(pkg[0:sz], "DNSOverRPC", "Resolve", nil)
 		if err != nil {
@@ -102,13 +103,6 @@
 		log.Fatal(err)
 	}
 
-	peer := client.Peer(host, uint(iport))
-	ch, err := client.NewChannelAndConnect(peer, sm)
-	if err != nil {
-		log.Fatal(err)
-	}
-	cl := client.New("Main", ch)
-
 	ua, err := net.ResolveUDPAddr("udp", *addr)
 	if err != nil {
 		log.Fatal(err)
@@ -117,6 +111,21 @@
 	if err != nil {
 		log.Fatal(err)
 	}
-	dc := dnsclient{rpccl: &cl, listener: uc}
-	dc.run()
+
+	const numClients = 10
+
+	for i := 0; i < numClients; i++ {
+		peer := client.Peer(host, uint(iport))
+		ch, err := client.NewChannelAndConnect(peer, sm)
+		if err != nil {
+			log.Fatal(err)
+		}
+		cl := client.New(fmt.Sprintf("Resolver%d", i), ch)
+		dc := dnsclient{rpccl: &cl, listener: uc, n: i}
+		if i < numClients-1 {
+			go dc.run()
+		} else {
+			dc.run()
+		}
+	}
 }