This section highlights the realtime resources available for Go developers.  Go is a programming language that is particularly well suited for high-performance, realtime web applications.


Realtime Go Libraries

uilive: a go library for updating terminal output in realtime –uilive is a go library for updating terminal output in realtime. It provides a buffered io.Writer that is flushed at a timed interval. uilive powers uiprogress.

rtsupportserver: Go Server for Realtime Web App Course – This repo contains the source for the Golang server build for the following course on Building Realtime Web Apps with Reactjs, Golang & RethinkDB http://courses.knowthen.com/courses/learn-how-to-develop-realtime-web-apps.  This Course Teaches you everything you need to know to build Realtime Web Apps using React, Golang & RethinkDB.

Go Chat: A simple realtime chat application written in Go – This is a simple chat web app written in Go

NSQ: A realtime distributed messaging platform – NSQ is a realtime distributed messaging platform designed to operate at scale, handling billions of messages per day. It promotes distributed and decentralized topologies without single points of failure, enabling fault tolerance and high availability coupled with a reliable message delivery guarantee.

Centrifugo: Language-agnostic real-time messaging (Websocket or SockJS) server in Go – Centrifugo is a real-time messaging server. It’s language-agnostic and can be used in conjunction with application backend written in any language – Python, Ruby, Perl, PHP, Javascript, Java, Objective-C etc.  Centrifugo runs as separate service and keeps persistent Websocket or SockJS connections from your application clients (from web browsers or other environments like iOS or Android apps). When some event happens you can broadcast it to all interested clients using Centrifugo API.

godnsbl: Go library for RBL (Real-time Blackhole List) lookups – Package godnsbl lets you perform RBL (Real-time Blackhole List – https://en.wikipedia.org/wiki/DNSBL) lookups using Golang

GoRealtimeWeb: Examples how to write realtime web applications in Golang – Examples how to write realtime web applications in Golang. This repository contains examples for the following real-time implementations: Server-sent events, Long Polling, Websocket Most of the long polling systems close the connection after each transmission from the server, with the help of oboe.js this example can handle multiple messages from the server in realtime without closing/reconnecting.

Gor: HTTP traffic replay in real-time. Replay traffic from production to staging and dev environments. – Gor is a simple http traffic replication tool written in Go. Its main goal is to replay traffic from production servers to staging and dev environments. Now you can test your code on real user sessions in an automated and repeatable fashion.  Gor consists of 2 parts: listener and replay servers. The listener server catches http traffic from a given port in real-time and sends it to the replay server. The replay server forwards traffic to a given address.

Awesome-Go: A curated list of awesome Go frameworks, libraries and software – A curated list of awesome Go frameworks, libraries and software. Inspired by awesome-python.


GoLang in Realtime

Specs

  • Golang’s Real-time GC in Theory and Practice
  • Author: Pusher, Will Sewell
  • December 2016

Resources

Synopsis

Garbage collectors are a bane of real-time systems because they pause the program. So when designing our new message bus, we chose the language carefully. Go emphasizes low latency, but we were wary: does Go really achieve this? If so, how?

In this blog post, we’ll look at Go’s garbage collector. We’ll see how it works (the tricolor algorithm), why it works (achieving such short GC pauses), and most importantly, whether it works (benchmarking these GC pauses, and comparing them with other languages).


A Real Time Chat App With Golang, Angular 2, And Websockets

Specs

  • Create A Real Time Chat App With Golang, Angular 2, And Websockets
  • Author: The Polyglot Developer, Nic Raboy
  • December 2016

Resources

Synopsis

I’ve been hearing a lot about websockets lately and how they can accomplish real time communication between applications and servers. They act as a compliment and possible alternative to RESTful APIs that have been around for significantly longer. With websockets you can do real time messaging for things like chat, communication with IoT, gaming, and a whole lot of other things that need instant communication between clients and the server.

A while back I had played around with websockets and Node.js using a library called Socket.io, but since I’ve been really getting into Golang I wanted to explore websockets using the Go programming language.

We’re going to check out how to create a chat application where the client is an Angular 2 application and the server is a Golang application.


Real-Time Web Apps in Go: Chat

Specs

  • Writing Real-Time Web Apps in Go: Chat
  • Author: Ola Holmström
  • September 2015

Resources

Synopsis

Go is a programming language that is particularly well suited for high-performance real-time web applications. Go is both faster and more memory efficient than most other popular alternatives, you’d think this would come at a cost of expressiveness but writing a meaningful real-time web app can be done in only a few lines.


Realtime Infrastructure Services

  • Realtime API Infrastructure – Realtime API infrastructure specifically allows developers to build realtime data push into their existing APIs.  Typically, you would not need to modify your existing API contracts, as the streaming server would serve as a proxy. The proxy design allows these services to fit nicely within an API stack. This means it can inherit other facilities from your REST API, such as authentication, logging, throttling, etc. It can be combined with an API management system.  In the case of WebSocket messages being proxied out as HTTP requests, the messages may be handled statelessly by the backend. Messages from a single connection can even be load balanced across a set of backend instances.
    • Fanout/Pushpin – Fanout is a real-time API development kit that helps you push data to connected devices easily. Fanout is a cross between a reverse proxy and a message broker. Pushpin is the open source version.
    • Streamdata.io – Streamdata.io a SaaS API proxy tool that converts standard API requests into a streaming API. In other words, it provides a proxy as a service for any HTTP API by polling and acting as a streaming API.
    • LiveResource – LiveResource is a protocol specification and JavaScript reference library for receiving live updates of web resources. It has the following principles:
  • Realtime Application Infrastructure – Realtime app infrastructure sends data to browsers and clients. It typically uses pub/sub messaging, webhooks, and/or websockets — and is separate from an application or service’s main API.
    • Firebase – Firebase is a BaaS (Backend-as-a-Service) that allows developers to create web applications with no server-side programming required.
    • Pubnub – PubNub is a programmable Data Stream Network (DSN) and realtime infrastructure-as-a-service (IaaS) company. Primarily, they are a messaging solution hosted on a cloud service that allows developers to publish data instantly to one or multiple devices.
    • Pusher – Pusher is a hosted service that allows developers to add realtime bi-directional functionality via WebSockets (with HTTP-based fallbacks) to the web and mobile apps.
    • Ably – Ably is a realtime data delivery platform that provides creators the tools to create, deliver, and manage projects. Their main realtime functionality consists of pub/sub, presence, authentication, encryption, and connection state recovery.