libp2p / go-libp2p-http

HTTP on top of libp2p
MIT License
62 stars 20 forks source link

client http actions with timeout not working #95

Open MOHANKUMAR-IT opened 6 months ago

MOHANKUMAR-IT commented 6 months ago

tried 1.)client := &http.Client{Transport: tr, Timeout: 2 time.Second} 2.) ctx, _ := context.WithTimeout(context.Background(), 2time.Second) req, _ := http.NewRequestWithContext(ctx, "POST", fmt.Sprintf("libp2p://%s/hello", srvHost.ID()), buf) 3.) custom protocol stream, err := clientHost.NewStream(getCtx, srvHost.ID(), "/test")

nothing works , is there any way?

go 1.20

require ( github.com/alitto/pond v1.8.3 github.com/benbjohnson/clock v1.3.5 github.com/gorilla/mux v1.8.0 github.com/ipfs/go-cid v0.4.1 github.com/ipfs/go-log v1.0.5 github.com/ipfs/go-log/v2 v2.5.1 github.com/libp2p/go-libp2p v0.32.1 github.com/libp2p/go-libp2p-gostream v0.6.0 github.com/libp2p/go-libp2p-http v0.5.0 github.com/libp2p/go-libp2p-kad-dht v0.24.3 github.com/libp2p/go-libp2p-pubsub v0.10.0 github.com/multiformats/go-multiaddr v0.12.0 github.com/multiformats/go-multihash v0.2.3 github.com/pkg/errors v0.9.1 github.com/prometheus/client_golang v1.17.0 golang.org/x/sync v0.5.0 )

MOHANKUMAR-IT commented 6 months ago

`package main

import ( "context" "github.com/libp2p/go-libp2p/core/host" "github.com/libp2p/go-libp2p/core/network" "github.com/libp2p/go-libp2p/core/peerstore" "log" "path/filepath" "time"

logging "github.com/ipfs/go-log/v2"
"github.com/libp2p/go-libp2p"

gostream "github.com/libp2p/go-libp2p-gostream"
multiaddr "github.com/multiformats/go-multiaddr"

)

// newHost illustrates how to build a libp2p host with secio using // a randomly generated key-pair func newHost(listen multiaddr.Multiaddr) host.Host { h, err := libp2p.New( libp2p.ListenAddrs(listen), ) if err != nil { log.Fatal(err) } return h }

func TestServerClient() { m1, := multiaddr.NewMultiaddr("/ip4/127.0.0.1/tcp/10000") m2, := multiaddr.NewMultiaddr("/ip4/127.0.0.1/tcp/10001") srvHost := newHost(m1) clientHost := newHost(m2) defer srvHost.Close() defer clientHost.Close()

srvHost.Peerstore().AddAddrs(clientHost.ID(), clientHost.Addrs(), peerstore.PermanentAddrTTL)
clientHost.Peerstore().AddAddrs(srvHost.ID(), srvHost.Addrs(), peerstore.PermanentAddrTTL)
listener, _ := gostream.Listen(srvHost, "/testiti-test")
srvHost.SetStreamHandler("/test", func(stream network.Stream) {
    log.Println("connected")
    time.Sleep(time.Second * 5)
    b := make([]byte, 1024)
    read, err := stream.Read(b)
    if err != nil {
        log.Println(err, read)
        return
    }
    log.Println("Msg", string(b))
    err = stream.Close()
    if err != nil {
        log.Println(err)
    }
})

defer listener.Close()

getCtx, cancel := context.WithTimeout(context.Background(), time.Second*2)
defer cancel()

stream, err := clientHost.NewStream(getCtx, srvHost.ID(), "/test")
if err != nil {
    log.Println(err)
    return
}

write, err := stream.Write([]byte("hello"))
if err != nil {
    log.Println(write, err)
    return
}

log.Println("Message sent successfully")

select {}

}

func main() { logConfig := logging.GetConfig() logConfig.File = filepath.Join(".\testing.log") logConfig.Stdout = false

logConfig.Level = logging.LevelDebug
logConfig.Stderr = false
logging.SetupLogging(logConfig)

TestServerClient()

} `

hsanjuan commented 4 months ago

Not sure what doesn't work. Can you explain and format your message properly for display?