-
Notifications
You must be signed in to change notification settings - Fork 100
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* added go mod support for v2 * README points to master * cleanup, fix of sockjs client library URL
- Loading branch information
Showing
16 changed files
with
116 additions
and
142 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,6 +7,7 @@ | |
# Folders | ||
_obj | ||
_test | ||
.idea | ||
|
||
# Architecture specific extensions/prefixes | ||
*.[568vq] | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,21 +1,18 @@ | ||
sudo: false | ||
language: go | ||
|
||
go: | ||
- "1.13.x" | ||
- "1.12.x" | ||
- tip | ||
- "1.14.x" | ||
|
||
before_install: | ||
- go get golang.org/x/tools/cmd/cover | ||
- go get github.com/mattn/goveralls | ||
|
||
after_success: | ||
- go test ./sockjs -coverprofile=profile.out -covermode=count | ||
- go test ./... -coverprofile=profile.out -covermode=count | ||
- PATH=$HOME/gopath/bin:$PATH goveralls -coverprofile=profile.out -service=travis-ci | ||
|
||
install: | ||
- go get -d -v -t ./... | ||
|
||
script: | ||
- go test ./sockjs -v -race | ||
- go test -race ./... |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,86 +1,8 @@ | ||
[![Build Status](https://api.travis-ci.org/igm/sockjs-go.svg?branch=v2)](https://travis-ci.org/igm/sockjs-go) [![GoDoc](http://godoc.org/gopkg.in/igm/sockjs-go.v2/sockjs?status.png)](http://godoc.org/gopkg.in/igm/sockjs-go.v2/sockjs) [![Coverage Status](https://coveralls.io/repos/igm/sockjs-go/badge.png?branch=v2)](https://coveralls.io/r/igm/sockjs-go?branch=v2) | ||
|
||
What is SockJS? | ||
= | ||
|
||
SockJS is a JavaScript library (for browsers) that provides a WebSocket-like | ||
object. SockJS gives you a coherent, cross-browser, Javascript API | ||
which creates a low latency, full duplex, cross-domain communication | ||
channel between the browser and the web server, with WebSockets or without. | ||
This necessitates the use of a server, which this is one version of, for GO. | ||
|
||
|
||
SockJS-Go server library | ||
= | ||
|
||
SockJS-Go is a [SockJS](https://github.com/sockjs/sockjs-client) server library written in Go. | ||
|
||
To use current stable version **v2** | ||
|
||
go get gopkg.in/igm/sockjs-go.v2/sockjs | ||
|
||
To use previous version **v1** (DEPRECATED) | ||
|
||
go get gopkg.in/igm/sockjs-go.v1/sockjs | ||
|
||
To install **development** version of `sockjs-go` run: | ||
|
||
go get github.com/igm/sockjs-go/sockjs | ||
|
||
|
||
Versioning | ||
- | ||
|
||
SockJS-Go project adopted [gopkg.in](http://gopkg.in) approach for versioning. SockJS-Go library details can be found [here](https://gopkg.in/igm/sockjs-go.v2/sockjs) | ||
|
||
|
||
Example | ||
v2 | ||
- | ||
|
||
A simple echo sockjs server: | ||
|
||
|
||
```go | ||
package main | ||
|
||
import ( | ||
"log" | ||
"net/http" | ||
|
||
"gopkg.in/igm/sockjs-go.v2/sockjs" | ||
) | ||
|
||
func main() { | ||
handler := sockjs.NewHandler("/echo", sockjs.DefaultOptions, echoHandler) | ||
log.Fatal(http.ListenAndServe(":8081", handler)) | ||
} | ||
|
||
func echoHandler(session sockjs.Session) { | ||
for { | ||
if msg, err := session.Recv(); err == nil { | ||
session.Send(msg) | ||
continue | ||
} | ||
break | ||
} | ||
} | ||
``` | ||
|
||
|
||
SockJS Protocol Tests Status | ||
- | ||
SockJS defines a set of [protocol tests](https://github.com/sockjs/sockjs-protocol) to quarantee a server compatibility with sockjs client library and various browsers. SockJS-Go server library aims to provide full compatibility, however there are couple of tests that don't and probably will never pass due to reasons explained in table below: | ||
|
||
|
||
| Failing Test | Explanation | | ||
| -------------| ------------| | ||
| **XhrPolling.test_transport** | does not pass due to a feature in net/http that does not send content-type header in case of StatusNoContent response code (even if explicitly set in the code), [details](https://code.google.com/p/go/source/detail?r=902dc062bff8) | | ||
| **WebSocket.** | Sockjs Go version supports RFC 6455, draft protocols hixie-76, hybi-10 are not supported | | ||
| **JSONEncoding** | As menioned in [browser quirks](https://github.com/sockjs/sockjs-client#browser-quirks) section: "it's advisable to use only valid characters. Using invalid characters is a bit slower, and may not work with SockJS servers that have a proper Unicode support." Go lang has a proper Unicode support | | ||
| **RawWebsocket.** | The sockjs protocol tests use old WebSocket client library (hybi-10) that does not support RFC 6455 properly | | ||
|
||
WebSocket | ||
- | ||
As mentioned above sockjs-go library is compatible with RFC 6455. That means the browsers not supporting RFC 6455 are not supported properly. There are no plans to support draft versions of WebSocket protocol. The WebSocket support is based on [Gorilla web toolkit](http://www.gorillatoolkit.org/pkg/websocket) implementation of WebSocket. | ||
[![Build Status](https://api.travis-ci.org/igm/sockjs-go.svg?branch=v2)](https://travis-ci.org/igm/sockjs-go) | ||
[![GoDoc](http://godoc.org/gopkg.in/igm/sockjs-go.v2/sockjs?status.svg)](http://godoc.org/gopkg.in/igm/sockjs-go.v2/sockjs) | ||
[![Coverage Status](https://coveralls.io/repos/igm/sockjs-go/badge.svg?branch=v2)](https://coveralls.io/r/igm/sockjs-go?branch=v2) | ||
|
||
For detailed information about browser versions supporting RFC 6455 see this [wiki page](http://en.wikipedia.org/wiki/WebSocket#Browser_support). | ||
For more information see [master README](https://github.com/igm/sockjs-go/blob/master/README.md). |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
// taken from https://github.com/igm/pubsub | ||
package main | ||
|
||
import ( | ||
"sync" | ||
) | ||
|
||
// Subscription Reader is used to read messages published by Publisher | ||
type SubReader interface { | ||
// Read operation blocks and waits for message from Publisher | ||
Read() interface{} | ||
} | ||
|
||
// Publisher is used to publish messages. Can be directly created. | ||
type Publisher struct { | ||
m sync.Mutex | ||
lastMsg *msg | ||
} | ||
|
||
type subscriber struct{ in chan *msg } | ||
|
||
type msg struct { | ||
val interface{} | ||
next chan *msg | ||
} | ||
|
||
func newMsg(val interface{}) *msg { return &msg{val: val, next: make(chan *msg, 1)} } | ||
|
||
// Publish publishes a message to all existing subscribers | ||
func (p *Publisher) Publish(val interface{}) { | ||
p.m.Lock() | ||
defer p.m.Unlock() | ||
|
||
msg := newMsg(val) | ||
if p.lastMsg != nil { | ||
p.lastMsg.next <- msg | ||
} | ||
p.lastMsg = msg | ||
} | ||
|
||
// SubReader returns a new reader for reading published messages and a last published message. | ||
func (p *Publisher) SubReader() (reader SubReader, lastMsg interface{}) { | ||
p.m.Lock() | ||
defer p.m.Unlock() | ||
|
||
if p.lastMsg == nil { | ||
p.lastMsg = newMsg(nil) | ||
} | ||
return &subscriber{p.lastMsg.next}, p.lastMsg.val | ||
} | ||
|
||
// SubChannel returns a new channel for reading published messages and a last published message. | ||
// If published messages equals (==) finalMsg then channel is closed afer putting message into channel. | ||
func (p *Publisher) SubChannel(finalMsg interface{}) (msgChan <-chan interface{}, lastMsg interface{}) { | ||
listener, cur := p.SubReader() | ||
outch := make(chan interface{}) | ||
go listen(listener, outch, finalMsg) | ||
return outch, cur | ||
} | ||
|
||
func listen(subscriber SubReader, ch chan interface{}, finalMsg interface{}) { | ||
defer close(ch) | ||
for { | ||
state := subscriber.Read() | ||
ch <- state | ||
if state == finalMsg { | ||
return | ||
} | ||
} | ||
} | ||
|
||
func (s *subscriber) Read() interface{} { | ||
msg := <-s.in | ||
s.in <- msg | ||
s.in = msg.next | ||
return msg.val | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
module gopkg.in/igm/sockjs-go.v2 | ||
|
||
go 1.14 | ||
|
||
require ( | ||
github.com/gorilla/websocket v1.4.2 | ||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= | ||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= | ||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= | ||
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= | ||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= | ||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= | ||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters