Serious Performance Improvements

This commit is contained in:
Alec
2022-02-01 20:48:08 -07:00
parent 6c2a0d15c3
commit 20c306ddcb
5 changed files with 423 additions and 97 deletions

View File

@@ -1,7 +1,6 @@
package cli package cli
import ( import (
"context"
"os" "os"
"path/filepath" "path/filepath"
@@ -38,7 +37,7 @@ func InitRun(r *cmd.Root, c *cmd.Sub) {
} }
// Create New Libp2p Node // Create New Libp2p Node
host, err := libp2p.New(context.Background()) host, err := libp2p.New()
checkErr(err) checkErr(err)
// Get Node's Private Key // Get Node's Private Key

View File

@@ -3,6 +3,7 @@ package cli
import ( import (
"bufio" "bufio"
"context" "context"
"encoding/binary"
"errors" "errors"
"fmt" "fmt"
"log" "log"
@@ -205,9 +206,12 @@ func UpRun(r *cmd.Root, c *cmd.Sub) {
dst := net.IPv4(packet[16], packet[17], packet[18], packet[19]).String() dst := net.IPv4(packet[16], packet[17], packet[18], packet[19]).String()
stream, ok := activeStreams[dst] stream, ok := activeStreams[dst]
if ok { if ok {
_, err = stream.Write(packet[:plen]) err = binary.Write(stream, binary.LittleEndian, uint16(plen))
if err == nil { if err == nil {
continue _, err = stream.Write(packet[:plen])
if err == nil {
continue
}
} }
stream.Close() stream.Close()
delete(activeStreams, dst) delete(activeStreams, dst)
@@ -216,10 +220,18 @@ func UpRun(r *cmd.Root, c *cmd.Sub) {
if peer, ok := peerTable[dst]; ok { if peer, ok := peerTable[dst]; ok {
stream, err = host.NewStream(ctx, peer, p2p.Protocol) stream, err = host.NewStream(ctx, peer, p2p.Protocol)
if err != nil { if err != nil {
log.Println(err)
continue continue
} }
stream.Write(packet[:plen]) err = binary.Write(stream, binary.LittleEndian, uint16(plen))
if err != nil {
stream.Close()
continue
}
_, err = stream.Write(packet[:plen])
if err != nil {
stream.Close()
continue
}
activeStreams[dst] = stream activeStreams[dst] = stream
} }
} }
@@ -265,14 +277,28 @@ func streamHandler(stream network.Stream) {
return return
} }
var packet = make([]byte, 1420) var packet = make([]byte, 1420)
var packetSize = make([]byte, 2)
for { for {
plen, err := stream.Read(packet) _, err := stream.Read(packetSize)
if err != nil { if err != nil {
stream.Close() stream.Close()
delete(activeStreams, RevLookup[stream.Conn().RemotePeer().Pretty()])
return return
} }
tunDev.Iface.Write(packet[:plen]) size := binary.LittleEndian.Uint16(packetSize)
if err != nil {
stream.Close()
return
}
var plen uint16 = 0
for plen < size {
tmp, err := stream.Read(packet[plen:size])
plen += uint16(tmp)
if err != nil {
stream.Close()
return
}
}
tunDev.Iface.Write(packet[:size])
} }
} }

18
go.mod
View File

@@ -4,20 +4,18 @@ go 1.16
require ( require (
github.com/DataDrake/cli-ng/v2 v2.0.2 github.com/DataDrake/cli-ng/v2 v2.0.2
github.com/hashicorp/go-version v1.2.1 // indirect github.com/hashicorp/go-version v1.4.0 // indirect
github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf github.com/inconshreveable/go-update v0.0.0-20160112193335-8152e7eb6ccf
github.com/ipfs/go-datastore v0.4.5 github.com/ipfs/go-datastore v0.5.1
github.com/kr/text v0.2.0 // indirect github.com/kr/text v0.2.0 // indirect
github.com/libp2p/go-libp2p v0.14.1 github.com/libp2p/go-libp2p v0.17.0
github.com/libp2p/go-libp2p-core v0.8.6 github.com/libp2p/go-libp2p-core v0.13.0
github.com/libp2p/go-libp2p-kad-dht v0.12.1 github.com/libp2p/go-libp2p-kad-dht v0.15.0
github.com/libp2p/go-libp2p-quic-transport v0.12.0 github.com/libp2p/go-libp2p-quic-transport v0.15.2
github.com/libp2p/go-tcp-transport v0.2.8 github.com/libp2p/go-tcp-transport v0.4.0
github.com/multiformats/go-multiaddr v0.3.3 github.com/multiformats/go-multiaddr v0.4.1
github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8 github.com/songgao/water v0.0.0-20200317203138-2b4b6d7c09d8
github.com/tcnksm/go-latest v0.0.0-20170313132115-e3007ae9052e github.com/tcnksm/go-latest v0.0.0-20170313132115-e3007ae9052e
github.com/vishvananda/netlink v1.1.0 github.com/vishvananda/netlink v1.1.0
golang.org/x/sys v0.0.0-20210603125802-9665404d3644 // indirect
gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v2 v2.4.0
honnef.co/go/tools v0.0.1-2020.1.4 // indirect
) )

456
go.sum

File diff suppressed because it is too large Load Diff

View File

@@ -36,11 +36,12 @@ func CreateNode(ctx context.Context, inputKey string, port int, handler network.
ip4tcp := fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", port) ip4tcp := fmt.Sprintf("/ip4/0.0.0.0/tcp/%d", port)
// Create libp2p node // Create libp2p node
node, err = libp2p.New(ctx, node, err = libp2p.New(
libp2p.ListenAddrStrings(ip6quic, ip4quic, ip6tcp, ip4tcp), libp2p.ListenAddrStrings(ip6quic, ip4quic, ip6tcp, ip4tcp),
libp2p.Identity(privateKey), libp2p.Identity(privateKey),
libp2p.DefaultSecurity, libp2p.DefaultSecurity,
libp2p.NATPortMap(), libp2p.NATPortMap(),
libp2p.DefaultMuxers,
libp2p.Transport(libp2pquic.NewTransport), libp2p.Transport(libp2pquic.NewTransport),
libp2p.Transport(tcp.NewTCPTransport), libp2p.Transport(tcp.NewTCPTransport),
libp2p.FallbackDefaults, libp2p.FallbackDefaults,