gowebsocket

package module
v0.0.0-...-425813c Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 5, 2021 License: Apache-2.0 Imports: 10 Imported by: 0

README

GoWebsocket

Gorilla websocket based simplified client implementation in GO.

Overview

This client provides following easy to implement functionality

  • Support for emitting and receiving text and binary data
  • Data compression
  • Concurrency control
  • Proxy support
  • Setting request headers
  • Subprotocols support
  • SSL verification enable/disable

To install use

    go get github.com/sacOO7/gowebsocket

Description

Create instance of Websocket by passing url of websocket-server end-point

    //Create a client instance
    socket := gowebsocket.New("ws://echo.websocket.org/")
    

Important Note : url to websocket server must be specified with either ws or wss.

Connecting to server
  • For connecting to server:
    //This will send websocket handshake request to socketcluster-server
    socket.Connect()
Registering All Listeners
    package main
    
    import (
    	"log"
    	"github.com/sacOO7/gowebsocket"
        "os"
        "os/signal"
    )
    
    func main() {
    
        interrupt := make(chan os.Signal, 1)
        signal.Notify(interrupt, os.Interrupt)
        
    	socket := gowebsocket.New("ws://echo.websocket.org/");
    	
    	socket.OnConnected = func(socket gowebsocket.Socket) {
    		log.Println("Connected to server");
    	};
    	
        socket.OnConnectError = func(err error, socket gowebsocket.Socket) {
            log.Println("Recieved connect error ", err)
        };
        
    	socket.OnTextMessage = func(message string, socket gowebsocket.Socket) {
    		log.Println("Recieved message " + message)
    	};
    	
    	socket.OnBinaryMessage = func(data [] byte, socket gowebsocket.Socket) {
            log.Println("Recieved binary data ", data)
        };
        
    	socket.OnPingReceived = func(data string, socket gowebsocket.Socket) {
    		log.Println("Recieved ping " + data)
    	};
    	
    	socket.OnPongReceived = func(data string, socket gowebsocket.Socket) {
            log.Println("Recieved pong " + data)
        };
        
    	socket.OnDisconnected = func(err error, socket gowebsocket.Socket) {
    		log.Println("Disconnected from server ")
    		return
    	};
    	
    	socket.Connect()
    	
        for {
            select {
            case <-interrupt:
                log.Println("interrupt")
                socket.Close()
                return
            }
        }
    }
    
Sending Text message
    socket.SendText("Hi there, this is my sample test message")
Sending Binary data
    token := make([]byte, 4)
    // rand.Read(token) putting some random value in token
    socket.SendBinary(token)
Closing the connection with server
    socket.Close()
Setting request headers
	socket.RequestHeader.Set("Accept-Encoding","gzip, deflate, sdch")
	socket.RequestHeader.Set("Accept-Language","en-US,en;q=0.8")
	socket.RequestHeader.Set("Pragma","no-cache")
	socket.RequestHeader.Set("User-Agent","Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36")
	
Setting proxy server
  • It can be set using connectionOptions by providing url to proxy server
    socket.ConnectionOptions = gowebsocket.ConnectionOptions {
       Proxy: gowebsocket.BuildProxy("http://example.com"),
    }
Setting data compression, ssl verification and subprotocols
  • It can be set using connectionOptions inside socket
    socket.ConnectionOptions = gowebsocket.ConnectionOptions {
        UseSSL:true,
        UseCompression:true,
        Subprotocols: [] string{"chat","superchat"},
    }
  • ConnectionOptions needs to be applied before connecting to server
  • Please checkout examples/gowebsocket directory for detailed code..

License

Apache License, Version 2.0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BuildProxy

func BuildProxy(Url string) func(*http.Request) (*url.URL, error)

Types

type ConnectionOptions

type ConnectionOptions struct {
	UseCompression bool
	UseSSL         bool
	Proxy          func(*http.Request) (*url.URL, error)
	Subprotocols   []string
}

type Empty

type Empty struct {
}

type ReconnectionOptions

type ReconnectionOptions struct {
}

todo Yet to be done

type Socket

type Socket struct {
	Conn              *websocket.Conn
	WebsocketDialer   *websocket.Dialer
	Url               string
	ConnectionOptions ConnectionOptions
	RequestHeader     http.Header
	OnConnected       func(socket Socket)
	OnTextMessage     func(message string, socket Socket)
	OnBinaryMessage   func(data []byte, socket Socket)
	OnConnectError    func(err error, socket Socket)
	OnDisconnected    func(err error, socket Socket)
	OnPingReceived    func(data string, socket Socket)
	OnPongReceived    func(data string, socket Socket)
	IsConnected       bool
	Timeout           time.Duration
	// contains filtered or unexported fields
}

func New

func New(url string) Socket

func (*Socket) Close

func (socket *Socket) Close()

func (*Socket) Connect

func (socket *Socket) Connect()

func (Socket) EnableLogging

func (socket Socket) EnableLogging()

func (Socket) GetLogger

func (socket Socket) GetLogger() logging.Logger

func (*Socket) SendBinary

func (socket *Socket) SendBinary(data []byte)

func (*Socket) SendText

func (socket *Socket) SendText(message string)

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL