Skip to content

Websockets

We have integrated websocket functionality directly into our routing environment using the simple-websockets package.

Example of server side

Below is the code for a simple websocket echo server. What ever you send the websocket connection will be sent back to you.

from tina4_python.Router import get
from tina4_python.Websocket import Websocket

@get("/websocket")
async def get_websocket(request, response):
    ws = await Websocket(request).connection()
    try:
        while True:
            data = await ws.receive()
            await ws.send(data)
    except Exception as e:
        pass
    return response("")

The above endpoint can be accessed on the same port as your webserver, ws://localhost:7145/websocket

Client side

We have included a reconnecting websocket component in the js folder. You can use whatever library or client you want.

<script src="/js/reconnecting-websocket.js"></script>
<script>
    socket = new ReconnectingWebSocket("ws://{{ request.headers.host }}/websocket");
    socket.send("Hello World!");

    // Do something when connected
    socket.addEventListener("open", (event) => {
        console.log("Websocket connected!");
        socket.send("Ping!"); //FYI this will cause an infinite loop of communication because the listener will respond!
    });

    // Listen for messages
    socket.addEventListener("message", (event) => {
        console.log("Message from server ", event.data);
        socket.send('Received!')
    });
</script>