Categorygithub.com/tomakado/websocketproxy
modulepackage
0.1.0
Repository: https://github.com/tomakado/websocketproxy.git
Documentation: pkg.go.dev

# README

WebsocketProxy GoDoc

WebsocketProxy is an http.Handler interface build on top of gorilla/websocket that you can plug into your existing Go web server to provide WebSocket reverse proxy.

NOTE: This is a fork of library by Koding. Original library seems abandoned. I'm going to support this fork, so feel free to open your issues and PRs.

Install

go get github.com/tomakado/websocketproxy

Example

Below is a simple server that proxies to the given backend URL

package main

import (
	"flag"
	"net/http"
	"net/url"

	"github.com/tomakado/websocketproxy"
)

var (
	flagBackend = flag.String("backend", "", "Backend URL for proxying")
)

func main() {
	u, err := url.Parse(*flagBackend)
	if err != nil {
		log.Fatalln(err)
	}

	if err = http.ListenAndServe(":80", websocketproxy.NewProxy(u)); err != nil {
		log.Fatalln(err)
	}
}

Save it as proxy.go and run as:

go run proxy.go -backend ws://example.com:3000

Now all incoming WebSocket requests coming to this server will be proxied to ws://example.com:3000

Differences with original library and TODOs

  • Switched to Go modules
  • TODO: integrated with GitHub Actions
  • TODO: updated tests
  • TODO: golangci-lint
  • TODO: fixed TODOs in code

# Functions

NewProxy returns a new Websocket reverse proxy that rewrites the URL's to the scheme, host and base path provider in target.
ProxyHandler returns a new http.Handler interface that reverse proxies the request to the given target.

# Variables

DefaultDialer is a dialer with all fields set to the default zero values.
DefaultUpgrader specifies the parameters for upgrading an HTTP connection to a WebSocket connection.

# Structs

WebsocketProxy is an HTTP Handler that takes an incoming WebSocket connection and proxies it to another server.