Skip to content

Commit dfce1fc

Browse files
authored
Merge pull request #155 from nhooyr/fixes
Fix WASM Subprotocol selection
2 parents c755bc8 + e4ac86d commit dfce1fc

File tree

8 files changed

+40
-25
lines changed

8 files changed

+40
-25
lines changed

README.md

-2
Original file line numberDiff line numberDiff line change
@@ -103,8 +103,6 @@ authors of both. In particular, I made sure to go through the issue tracker of g
103103
to ensure I implemented details correctly and understood how people were using WebSockets in
104104
production.
105105

106-
Another comparison between Go WebSocket libraries is available at [gorilla/websocket](https://github.com/gorilla/websocket#gorilla-websocket-compared-with-other-packages).
107-
108106
### gorilla/websocket
109107

110108
https://github.com/gorilla/websocket

ci/test.sh

+6-2
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,12 @@ fi
2727
mkdir -p ci/out/websocket
2828
"${argv[@]}"
2929

30-
# Removes coverage of generated files.
31-
grep -v _string.go < ci/out/coverage.prof > ci/out/coverage2.prof
30+
# Removes coverage of generated/test related files.
31+
grep -v _stringer.go < ci/out/coverage.prof > ci/out/coverage2.prof
32+
mv ci/out/coverage2.prof ci/out/coverage.prof
33+
grep -v wsjstest < ci/out/coverage.prof > ci/out/coverage2.prof
34+
mv ci/out/coverage2.prof ci/out/coverage.prof
35+
grep -v wsecho < ci/out/coverage.prof > ci/out/coverage2.prof
3236
mv ci/out/coverage2.prof ci/out/coverage.prof
3337

3438
go tool cover -html=ci/out/coverage.prof -o=ci/out/coverage.html

ci/wasm.sh

+2-1
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,8 @@ if [[ -z $WS_ECHO_SERVER_URL ]]; then
2222
fi
2323

2424
go install github.com/agnivade/wasmbrowsertest
25-
GOOS=js GOARCH=wasm go test -exec=wasmbrowsertest ./... -args "$WS_ECHO_SERVER_URL"
25+
export WS_ECHO_SERVER_URL
26+
GOOS=js GOARCH=wasm go test -exec=wasmbrowsertest ./...
2627

2728
kill "$wsjstestPID"
2829
if ! wait "$wsjstestPID"; then

go.mod

+7-2
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,17 @@ module nhooyr.io/websocket
33
go 1.13
44

55
require (
6-
github.com/agnivade/wasmbrowsertest v0.3.0
6+
github.com/agnivade/wasmbrowsertest v0.3.1
7+
github.com/chromedp/cdproto v0.0.0-20190926234355-1b4886c6fad6 // indirect
8+
github.com/chromedp/chromedp v0.4.0 // indirect
79
github.com/fatih/color v1.7.0 // indirect
10+
github.com/go-interpreter/wagon v0.6.0 // indirect
811
github.com/golang/protobuf v1.3.2
912
github.com/google/go-cmp v0.3.1
13+
github.com/google/pprof v0.0.0-20190908185732-236ed259b199 // indirect
1014
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
1115
github.com/kr/pretty v0.1.0 // indirect
16+
github.com/mailru/easyjson v0.7.0 // indirect
1217
github.com/mattn/go-colorable v0.1.2 // indirect
1318
github.com/mattn/go-isatty v0.0.9 // indirect
1419
github.com/pkg/errors v0.8.1 // indirect
@@ -20,7 +25,7 @@ require (
2025
go.uber.org/multierr v1.1.0
2126
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac
2227
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e // indirect
23-
golang.org/x/sys v0.0.0-20190919044723-0c1ff786ef13 // indirect
28+
golang.org/x/sys v0.0.0-20190927073244-c990c680b611 // indirect
2429
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4
2530
golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72
2631
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect

go.sum

+16-4
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
1-
github.com/agnivade/wasmbrowsertest v0.3.0 h1:5pAabhWzTVCLoVWqYejEbmWyzNGFR7K/Nu5lsmD1fVc=
2-
github.com/agnivade/wasmbrowsertest v0.3.0/go.mod h1:zQt6ZTdl338xxRaMW395qccVE2eQm0SjC/SDz0mPWQI=
1+
github.com/agnivade/wasmbrowsertest v0.3.1 h1:bA9aA+bcp7KuqGvmCuBdnMqy6PXxFjYP7FxsaT+JSqc=
2+
github.com/agnivade/wasmbrowsertest v0.3.1/go.mod h1:zQt6ZTdl338xxRaMW395qccVE2eQm0SjC/SDz0mPWQI=
33
github.com/chromedp/cdproto v0.0.0-20190614062957-d6d2f92b486d/go.mod h1:S8mB5wY3vV+vRIzf39xDXsw3XKYewW9X6rW2aEmkrSw=
44
github.com/chromedp/cdproto v0.0.0-20190621002710-8cbd498dd7a0 h1:4Wocv9f+KWF4GtZudyrn8JSBTgHQbGp86mcsoH7j1iQ=
55
github.com/chromedp/cdproto v0.0.0-20190621002710-8cbd498dd7a0/go.mod h1:S8mB5wY3vV+vRIzf39xDXsw3XKYewW9X6rW2aEmkrSw=
6+
github.com/chromedp/cdproto v0.0.0-20190812224334-39ef923dcb8d/go.mod h1:0YChpVzuLJC5CPr+x3xkHN6Z8KOSXjNbL7qV8Wc4GW0=
7+
github.com/chromedp/cdproto v0.0.0-20190926234355-1b4886c6fad6 h1:C/dvU7FH/BUbkgKS/eYDrja/D5idxH+FxaVmFRWW3E8=
8+
github.com/chromedp/cdproto v0.0.0-20190926234355-1b4886c6fad6/go.mod h1:0YChpVzuLJC5CPr+x3xkHN6Z8KOSXjNbL7qV8Wc4GW0=
69
github.com/chromedp/chromedp v0.3.1-0.20190619195644-fd957a4d2901 h1:tg66ykM8VYqP9k4DFQwSMnYv84HNTruF+GR6kefFNg4=
710
github.com/chromedp/chromedp v0.3.1-0.20190619195644-fd957a4d2901/go.mod h1:mJdvfrVn594N9tfiPecUidF6W5jPRKHymqHfzbobPsM=
11+
github.com/chromedp/chromedp v0.4.0 h1:0AJC5ejETuh/6n7Tcsw4u4G0eKZkI9aVRwckWaImLUE=
12+
github.com/chromedp/chromedp v0.4.0/go.mod h1:DC3QUn4mJ24dwjcaGQLoZrhm4X/uPHZ6spDbS2uFhm4=
813
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
914
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1015
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -19,6 +24,8 @@ github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV
1924
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
2025
github.com/go-interpreter/wagon v0.5.1-0.20190713202023-55a163980b6c h1:DLLAPVFrk9iNzljMKF512CUmrFImQ6WU3sDiUS4IRqk=
2126
github.com/go-interpreter/wagon v0.5.1-0.20190713202023-55a163980b6c/go.mod h1:5+b/MBYkclRZngKF5s6qrgWxSLgE9F5dFdO1hAueZLc=
27+
github.com/go-interpreter/wagon v0.6.0 h1:BBxDxjiJiHgw9EdkYXAWs8NHhwnazZ5P2EWBW5hFNWw=
28+
github.com/go-interpreter/wagon v0.6.0/go.mod h1:5+b/MBYkclRZngKF5s6qrgWxSLgE9F5dFdO1hAueZLc=
2229
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0=
2330
github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo=
2431
github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8=
@@ -33,6 +40,8 @@ github.com/google/go-cmp v0.3.1 h1:Xye71clBPdm5HgqGwUkwhbynsUJZhDbS20FvLhQ2izg=
3340
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
3441
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f h1:Jnx61latede7zDD3DiiP4gmNz33uK0U5HDUaF0a/HVQ=
3542
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
43+
github.com/google/pprof v0.0.0-20190908185732-236ed259b199 h1:sEyCq3pOT7tNC+3gcLI7sZkBDgntZ6wQJNmr9lmIjIc=
44+
github.com/google/pprof v0.0.0-20190908185732-236ed259b199/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
3645
github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI=
3746
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
3847
github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo=
@@ -52,6 +61,9 @@ github.com/mailru/easyjson v0.0.0-20190403194419-1ea4449da983/go.mod h1:C1wdFJiN
5261
github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
5362
github.com/mailru/easyjson v0.0.0-20190620125010-da37f6c1e481 h1:IaSjLMT6WvkoZZjspGxy3rdaTEmWLoRm49WbtVUi9sA=
5463
github.com/mailru/easyjson v0.0.0-20190620125010-da37f6c1e481/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
64+
github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
65+
github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM=
66+
github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs=
5567
github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
5668
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
5769
github.com/mattn/go-colorable v0.1.2 h1:/bC9yWikZXAL9uJdulbSfyVNIR3n3trXl+v8+1sx8mU=
@@ -118,8 +130,8 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
118130
golang.org/x/sys v0.0.0-20190618155005-516e3c20635f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
119131
golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
120132
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
121-
golang.org/x/sys v0.0.0-20190919044723-0c1ff786ef13 h1:/zi0zzlPHWXYXrO1LjNRByFu8sdGgCkj2JLDdBIB84k=
122-
golang.org/x/sys v0.0.0-20190919044723-0c1ff786ef13/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
133+
golang.org/x/sys v0.0.0-20190927073244-c990c680b611 h1:q9u40nxWT5zRClI/uU9dHCiYGottAg6Nzz4YUQyHxdA=
134+
golang.org/x/sys v0.0.0-20190927073244-c990c680b611/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
123135
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
124136
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
125137
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=

internal/wsjs/wsjs_js.go

+5-8
Original file line numberDiff line numberDiff line change
@@ -43,19 +43,11 @@ func New(url string, protocols []string) (c WebSocket, err error) {
4343

4444
c.setBinaryType("arraybuffer")
4545

46-
c.Extensions = c.v.Get("extensions").String()
47-
c.Protocol = c.v.Get("protocol").String()
48-
c.URL = c.v.Get("url").String()
49-
5046
return c, nil
5147
}
5248

5349
// WebSocket is a wrapper around a javascript WebSocket object.
5450
type WebSocket struct {
55-
Extensions string
56-
Protocol string
57-
URL string
58-
5951
v js.Value
6052
}
6153

@@ -131,6 +123,11 @@ func (c WebSocket) OnMessage(fn func(m MessageEvent)) (remove func()) {
131123
})
132124
}
133125

126+
// Subprotocol returns the WebSocket subprotocol in use.
127+
func (c WebSocket) Subprotocol() string {
128+
return c.v.Get("protocol").String()
129+
}
130+
134131
// OnOpen registers a function to be called when the websocket is opened.
135132
func (c WebSocket) OnOpen(fn func(e js.Value)) (remove func()) {
136133
return c.addEventListener("open", fn)

websocket_js.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -219,7 +219,7 @@ func (c *Conn) Close(code StatusCode, reason string) error {
219219
// Subprotocol returns the negotiated subprotocol.
220220
// An empty string means the default protocol.
221221
func (c *Conn) Subprotocol() string {
222-
return c.ws.Protocol
222+
return c.ws.Subprotocol()
223223
}
224224

225225
// DialOptions represents the options available to pass to Dial.

websocket_js_test.go

+3-5
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@ package websocket_test
22

33
import (
44
"context"
5-
"flag"
65
"net/http"
6+
"os"
77
"testing"
88
"time"
99

@@ -13,20 +13,18 @@ import (
1313
func TestConn(t *testing.T) {
1414
t.Parallel()
1515

16-
wsEchoServerURL := flag.Arg(0)
17-
1816
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
1917
defer cancel()
2018

21-
c, resp, err := websocket.Dial(ctx, wsEchoServerURL, &websocket.DialOptions{
19+
c, resp, err := websocket.Dial(ctx, os.Getenv("WS_ECHO_SERVER_URL"), &websocket.DialOptions{
2220
Subprotocols: []string{"echo"},
2321
})
2422
if err != nil {
2523
t.Fatal(err)
2624
}
2725
defer c.Close(websocket.StatusInternalError, "")
2826

29-
assertSubprotocol(c, "echo")
27+
err = assertSubprotocol(c, "echo")
3028
if err != nil {
3129
t.Fatal(err)
3230
}

0 commit comments

Comments
 (0)