Websocket

In general the websocket API works the same way as the polling API. Once you found an endpoint that provides the data in the format you are looking for you can apply it directly to the websocket connection.

Implementations

JavaScript

function LitenMFN (newsCallback) {
        wsuri = 'wss://mfn.modfin.se/s.json';
        console.log("WC:", "connecting to", wsuri);
       
        var socket = new WebSocket(wsuri);
        socket.onopen = function (event) {
            console.log("WC:", "socket is open", event)
        };
        socket.onclose = function (event) {
            console.log("WC:", "socket was closed, reconnecting", event);
            LitenMFN()
        }
        socket.onmessage = function (event) {
            console.log("WC:", "Got message", event.data.length);
            var newsItem = JSON.parse(event.data);
            newsCallback(newsItem)
        }
    }

Go

package mfn

import (
	"log"
	"net/url"
	"github.com/gorilla/websocket"
	"errors"
)

func Listen(host string) (items <- chan []byte, closer chan struct{},  errs <- chan error) {

	items = make(chan []byte, 10)
	closer = make(chan struct{})
	errs = make(chan error)
	
	u := url.URL{Scheme: "wss", Host: host, Path: "/s.json"}

	c, _, err := websocket.DefaultDialer.Dial(u.String(), nil)
	if err != nil {
		errs <- err
		close(closer)
		return 
	}

	go func() {
		select {
		case <-closer:
			c.Close()
		}
	}()

	go func() {
		defer close(closer)
		for {
			_, message, err := c.ReadMessage()
			if err != nil {
				errs <- err
				return
			}
			log.Printf("recv: %s", message)
			items <- message
		}
	}()
	
	return
}

Last updated