mirror of
https://github.com/smallnest/rpcx.git
synced 2025-09-26 20:21:14 +08:00
#200 support utp and rudp
This commit is contained in:
4
Makefile
4
Makefile
@@ -52,7 +52,7 @@ build:
|
||||
go build ./...
|
||||
|
||||
build-all:
|
||||
go build -tags "reuseport kcp quic zookeeper etcd consul ping" ./...
|
||||
go build -tags "reuseport kcp quic zookeeper etcd consul ping utp rudp" ./...
|
||||
|
||||
test:
|
||||
go test -race -tags "reuseport kcp quic zookeeper etcd consul ping" ./...
|
||||
go test -tags "reuseport kcp quic zookeeper etcd consul ping utp rudp" ./...
|
||||
|
@@ -34,6 +34,8 @@ func (t *PBArith) Mul(ctx context.Context, args *testutils.ProtoArgs, reply *tes
|
||||
}
|
||||
|
||||
func TestClient_IT(t *testing.T) {
|
||||
server.UsePool = false
|
||||
|
||||
s := server.NewServer()
|
||||
s.RegisterName("Arith", new(Arith), "")
|
||||
s.RegisterName("PBArith", new(PBArith), "")
|
||||
|
@@ -13,6 +13,10 @@ import (
|
||||
"github.com/smallnest/rpcx/share"
|
||||
)
|
||||
|
||||
type makeConnFn func(c *Client, network, address string) (net.Conn, error)
|
||||
|
||||
var makeConnMap = make(map[string]makeConnFn)
|
||||
|
||||
// Connect connects the server via specified network.
|
||||
func (c *Client) Connect(network, address string) error {
|
||||
var conn net.Conn
|
||||
@@ -28,7 +32,12 @@ func (c *Client) Connect(network, address string) error {
|
||||
case "unix":
|
||||
conn, err = newDirectConn(c, network, address)
|
||||
default:
|
||||
conn, err = newDirectConn(c, network, address)
|
||||
fn := makeConnMap[network]
|
||||
if fn != nil {
|
||||
conn, err = fn(c, network, address)
|
||||
} else {
|
||||
conn, err = newDirectConn(c, network, address)
|
||||
}
|
||||
}
|
||||
|
||||
if err == nil && conn != nil {
|
||||
|
@@ -9,14 +9,5 @@ import (
|
||||
)
|
||||
|
||||
func newDirectKCPConn(c *Client, network, address string) (net.Conn, error) {
|
||||
var conn net.Conn
|
||||
var err error
|
||||
|
||||
conn, err = kcp.DialWithOptions(address, c.option.Block.(kcp.BlockCrypt), 10, 3)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return conn, nil
|
||||
return kcp.DialWithOptions(address, c.option.Block.(kcp.BlockCrypt), 10, 3)
|
||||
}
|
||||
|
@@ -10,19 +10,10 @@ import (
|
||||
)
|
||||
|
||||
func newDirectQuicConn(c *Client, network, address string) (net.Conn, error) {
|
||||
var conn net.Conn
|
||||
var err error
|
||||
|
||||
tlsConf := c.option.TLSConfig
|
||||
if tlsConf == nil {
|
||||
tlsConf = &tls.Config{InsecureSkipVerify: true}
|
||||
}
|
||||
|
||||
conn, err = quicconn.Dial(address, tlsConf)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return conn, nil
|
||||
return quicconn.Dial(address, tlsConf)
|
||||
}
|
||||
|
21
client/connection_rudp.go
Normal file
21
client/connection_rudp.go
Normal file
@@ -0,0 +1,21 @@
|
||||
// +build rudp
|
||||
|
||||
package client
|
||||
|
||||
import (
|
||||
"net"
|
||||
)
|
||||
|
||||
func init() {
|
||||
makeConnMap["rudp"] = newDirectRUDPConn
|
||||
}
|
||||
|
||||
func newDirectRUDPConn(c *Client, network, address string) (net.Conn, error) {
|
||||
addr, err := net.ResolveUDPAddr("udp", address)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
laddr := net.UDPAddr{IP: net.IPv4zero, Port: 0}
|
||||
return net.DialUDP("udp", &laddr, addr)
|
||||
}
|
17
client/connection_utp.go
Normal file
17
client/connection_utp.go
Normal file
@@ -0,0 +1,17 @@
|
||||
// +build utp
|
||||
|
||||
package client
|
||||
|
||||
import (
|
||||
"net"
|
||||
|
||||
"github.com/anacrolix/utp"
|
||||
)
|
||||
|
||||
func init() {
|
||||
makeConnMap["utp"] = newDirectUTPConn
|
||||
}
|
||||
|
||||
func newDirectUTPConn(c *Client, network, address string) (net.Conn, error) {
|
||||
return utp.Dial(address)
|
||||
}
|
27
server/rudp.go
Normal file
27
server/rudp.go
Normal file
@@ -0,0 +1,27 @@
|
||||
// +build rudp
|
||||
|
||||
package server
|
||||
|
||||
import (
|
||||
"net"
|
||||
|
||||
"github.com/u35s/rudp"
|
||||
)
|
||||
|
||||
func init() {
|
||||
makeListeners["rudp"] = rudpMakeListener
|
||||
}
|
||||
|
||||
func rudpMakeListener(s *Server, address string) (ln net.Listener, err error) {
|
||||
addr, err := net.ResolveUDPAddr("udp", address)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
l, err := net.ListenUDP("udp", addr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return rudp.NewListener(l), nil
|
||||
}
|
17
server/utp.go
Normal file
17
server/utp.go
Normal file
@@ -0,0 +1,17 @@
|
||||
// +build utp
|
||||
|
||||
package server
|
||||
|
||||
import (
|
||||
"net"
|
||||
|
||||
"github.com/anacrolix/utp"
|
||||
)
|
||||
|
||||
func init() {
|
||||
makeListeners["utp"] = utpMakeListener
|
||||
}
|
||||
|
||||
func utpMakeListener(s *Server, address string) (ln net.Listener, err error) {
|
||||
return utp.Listen(address)
|
||||
}
|
Reference in New Issue
Block a user