sacOO7 / GoWebsocket

Gorilla websockets based simplified websocket-client implementation in GO.
Apache License 2.0
167 stars 63 forks source link
client concurrency-control event-driven go golang gorilla listener-pattern websocket

GoWebsocket

Gorilla websocket based simplified client implementation in GO.

Overview

This client provides following easy to implement functionality

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

    //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("Received connect error ", err)
        };

        socket.OnTextMessage = func(message string, socket gowebsocket.Socket) {
            log.Println("Received message " + message)
        };

        socket.OnBinaryMessage = func(data [] byte, socket gowebsocket.Socket) {
            log.Println("Received binary data ", data)
        };

        socket.OnPingReceived = func(data string, socket gowebsocket.Socket) {
            log.Println("Received ping " + data)
        };

        socket.OnPongReceived = func(data string, socket gowebsocket.Socket) {
            log.Println("Received 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

    socket.ConnectionOptions = gowebsocket.ConnectionOptions {
       Proxy: gowebsocket.BuildProxy("http://example.com"),
    }

Setting data compression, ssl verification and subprotocols

    socket.ConnectionOptions = gowebsocket.ConnectionOptions {
        UseSSL:true,
        UseCompression:true,
        Subprotocols: [] string{"chat","superchat"},
    }

License

Apache License, Version 2.0