Skip to content

nikandfor/websocket

Repository files navigation

Documentation Go workflow CircleCI codecov Go Report Card GitHub tag (latest SemVer)

websocket

Lightweight efficient websocket library.

Usage

Server

func server() error {
    s := websocket.Server{
        Handler: func(ctx context.Context, c *websocket.Conn) error {
            _, err := io.Copy(c, c)
            return err
        },
    }

    return http.ListenAndServe(":80", &s)
}

// or
func handler(w http.ResponseWriter, req *http.Request) error {
    var s websocket.Server

    // play with req: check auth, handle hacky case, etc...

    _, err := s.ServeHandler(w, req, func(ctx context.Context, c *websocket.Conn) error {
        _, err := io.Copy(c, c)
        return err
    })

    return err
}

// or
func withoutCallback(w http.ResponseWriter, req *http.Request) error {
    var s websocket.Server

    // play with req: check auth, handle hacky case, etc...

    c, err := s.Handshake(ctx, w, req)
    if err != nil {
        return errors.Wrap(err, "handshake")
    }

    defer c.Close()

    // all the following is connection handler essentially

    _, err = io.Copy(c, c)

    return err
}

Client

func dial() (*websocket.Conn, error){
    var cl websocket.Client

    return cl.DialContext(ctx, "ws://some-host/some/path?and=params")
}

// or
func manual() (*websocket.Conn, error){
    var cl websocket.Client

    req, err := cl.NewRequest(ctx, "ws://some-host/some/path?and=params")
    // if err != nil ...

    // set req.Header or something

    c, resp, err := cl.Handshake(ctx, req)
    // if err != nil ...

    // check resp.Header or something

    return c, nil
}

About

Lightweight and extensible websocket Go library

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages