enable compression by default
This commit is contained in:
@@ -29,23 +29,28 @@ type Connection struct {
|
|||||||
mutex sync.Mutex
|
mutex sync.Mutex
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewConnection(ctx context.Context, url string, requestHeader http.Header, enableCompression bool) (*Connection, error) {
|
func NewConnection(ctx context.Context, url string, requestHeader http.Header) (*Connection, error) {
|
||||||
dialer := ws.Dialer{
|
dialer := ws.Dialer{
|
||||||
Header: ws.HandshakeHeaderHTTP(requestHeader),
|
Header: ws.HandshakeHeaderHTTP(requestHeader),
|
||||||
}
|
Extensions: []httphead.Option{
|
||||||
state := ws.StateClientSide
|
|
||||||
if enableCompression {
|
|
||||||
state |= ws.StateExtended
|
|
||||||
dialer.Extensions = []httphead.Option{
|
|
||||||
wsflate.DefaultParameters.Option(),
|
wsflate.DefaultParameters.Option(),
|
||||||
}
|
},
|
||||||
}
|
}
|
||||||
|
conn, _, hs, err := dialer.Dial(ctx, url)
|
||||||
conn, _, _, err := dialer.Dial(ctx, url)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to dial: %w", err)
|
return nil, fmt.Errorf("failed to dial: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enableCompression := false
|
||||||
|
state := ws.StateClientSide
|
||||||
|
for _, extension := range hs.Extensions {
|
||||||
|
if string(extension.Name) == wsflate.ExtensionName {
|
||||||
|
enableCompression = true
|
||||||
|
state |= ws.StateExtended
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// reader
|
// reader
|
||||||
var flateReader *wsflate.Reader
|
var flateReader *wsflate.Reader
|
||||||
var msgState wsflate.MessageState
|
var msgState wsflate.MessageState
|
||||||
|
|||||||
7
relay.go
7
relay.go
@@ -38,9 +38,8 @@ type Relay struct {
|
|||||||
URL string
|
URL string
|
||||||
RequestHeader http.Header // e.g. for origin header
|
RequestHeader http.Header // e.g. for origin header
|
||||||
|
|
||||||
Connection *Connection
|
Connection *Connection
|
||||||
EnableCompression bool
|
subscriptions s.MapOf[string, *Subscription]
|
||||||
subscriptions s.MapOf[string, *Subscription]
|
|
||||||
|
|
||||||
Challenges chan string // NIP-42 Challenges
|
Challenges chan string // NIP-42 Challenges
|
||||||
Notices chan string
|
Notices chan string
|
||||||
@@ -90,7 +89,7 @@ func (r *Relay) Connect(ctx context.Context) error {
|
|||||||
defer cancel()
|
defer cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
conn, err := NewConnection(ctx, r.URL, r.RequestHeader, r.EnableCompression)
|
conn, err := NewConnection(ctx, r.URL, r.RequestHeader)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
cancel()
|
cancel()
|
||||||
return fmt.Errorf("error opening websocket to '%s': %w", r.URL, err)
|
return fmt.Errorf("error opening websocket to '%s': %w", r.URL, err)
|
||||||
|
|||||||
@@ -43,44 +43,3 @@ end:
|
|||||||
t.Errorf("expected 2 events, got %d", events)
|
t.Errorf("expected 2 events, got %d", events)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestSubscribeEnableCompression(t *testing.T) {
|
|
||||||
rl := &Relay{URL: NormalizeURL("wss://relay.damus.io"), EnableCompression: true}
|
|
||||||
err := rl.Connect(context.Background())
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("connection failed: %v", err)
|
|
||||||
}
|
|
||||||
defer rl.Close()
|
|
||||||
|
|
||||||
sub, err := rl.Subscribe(context.Background(), Filters{{Kinds: []int{1}, Limit: 2}})
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("subscription failed: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
timeout := time.After(5 * time.Second)
|
|
||||||
events := 0
|
|
||||||
|
|
||||||
for {
|
|
||||||
select {
|
|
||||||
case event := <-sub.Events:
|
|
||||||
if event == nil {
|
|
||||||
t.Errorf("event is nil: %v", event)
|
|
||||||
}
|
|
||||||
events++
|
|
||||||
case <-sub.EndOfStoredEvents:
|
|
||||||
goto end
|
|
||||||
case <-rl.ConnectionContext.Done():
|
|
||||||
t.Errorf("connection closed: %v", rl.ConnectionContext.Err())
|
|
||||||
goto end
|
|
||||||
case <-timeout:
|
|
||||||
t.Errorf("timeout")
|
|
||||||
goto end
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
end:
|
|
||||||
if events != 2 {
|
|
||||||
t.Errorf("expected 2 events, got %d", events)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user