Go-WebRPC is an RPC-style communication library providing a thin abstraction over WebSockets.
WebRPC is a library. To make use of it, you need to write software that imports it.
To make it easier to get started, a full demo is included that can be used with Docker Compose.
Go-WebRPC is built in the Go programming language. If you are new to Go, you will need to install Go.
You may want Docker in order to easily test the demo app, though it is not required to use go-webrpc or the demo app.
Next, you'll want to go get go-webrpc, like so:
go get github.com/Benzinga/go-webrpcIf your $GOPATH is configured, and git is setup to know your credentials, in a few moments the command should complete with no output. The repository will exist under $GOPATH/src/github.com/Benzinga/go-webrpc. It cannot be moved from this location.
Hint: If you've never used Go before, your $GOPATH will be under the go folder of your user directory.
In order to run the demo app, you'll need to change into the example/chat directory. Then, run docker-compose up.
cd example/chat
docker-compose upThen, in a browser, visit http://localhost:1234. You should be able to chat with yourself.
The server code is fairly simple, weighing around 40 lines of code.
First, the server is instantiated.
server := webrpc.NewServer()Next, the OnConnect handler is set. This handler handles when a WebRPC client connects, and is similar to ServeHTTP.
server.OnConnect(func(c *webrpc.Conn) {
...
})In the OnConnect handler, we use the user's address as a sort of username.
server.OnConnect(func(c *webrpc.Conn) {
user := c.Addr().String()
...
})We define a few helper functions. These deal with sending messages to the client.
server.OnConnect(func(c *webrpc.Conn) {
...
join := func(ch string) {
c.Join(ch)
server.Broadcast(ch, "join", time.Now(), user, ch)
}
part := func(ch string) {
server.Broadcast(ch, "part", time.Now(), user, ch)
c.Leave(ch)
}
msg := func(ch string, msg string) {
server.Broadcast(ch, "msg", time.Now(), user, msg)
}
...
})To conclude our OnConnect handler, we do some things upon connecting as well as register a simple disconnect handler.
server.OnConnect(func(c *webrpc.Conn) {
...
c.On("msg", msg)
join("#welcome")
c.OnClose(func() {
part("#welcome")
})
})Finally, we start an HTTP server with our WebRPC setup.
http.ListenAndServe(":4321", server)The client is written in JavaScript and uses webrpc.js. This is out of scope for this README, but the code is in the example/chat/client folder of the repository.