Git Product home page Git Product logo

sockjs-go's Introduction

Build Status GoDoc Coverage Status

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 server library written in Go.

For latest v3 version of sockjs-go use:

github.com/igm/sockjs-go/v3/sockjs

For v2 version of sockjs-go use:

gopkg.in/igm/sockjs-go.v2/sockjs

Using version v1 is not recommended (DEPRECATED)

gopkg.in/igm/sockjs-go.v1/sockjs

Note: using github.com/igm/sockjs-go/sockjs is not recommended. It exists for backwards compatibility reasons and is not maintained.

Versioning

SockJS-Go project adopted gopkg.in approach for versioning. SockJS-Go library details can be found here

With the introduction of go modules a new version v3 is developed and maintained in the master and has new import part github.com/igm/sockjs-go/v3/sockjs.

Example

A simple echo sockjs server:

package main

import (
	"log"
	"net/http"

	"github.com/igm/sockjs-go/v3/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 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
WebSocket. Sockjs Go version supports RFC 6455, draft protocols hixie-76, hybi-10 are not supported
JSONEncoding As menioned in 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 implementation of WebSocket.

For detailed information about browser versions supporting RFC 6455 see this wiki page.

sockjs-go's People

Contributors

aronatkins avatar bbigras avatar cenkalti avatar druska avatar dustin avatar eelcocramer avatar fatih avatar fivegreenapples avatar fzambia avatar gebi avatar gngeorgiev avatar igm avatar jamesgroat avatar jcheng5 avatar mariokostelac avatar mweibel avatar paulhovey avatar rjeczalik avatar scottmmjackson avatar tegioz avatar thehippo avatar tmc avatar wavded avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.