Retro JS talk: modern browser communications

Or how easy it is to implement interactive apps and how we got here.

Robert Kawecki (speaker)

Robert Kawecki

"Retro JS talk: modern browser communications"

2017-02-08

github.com/rkaw92

What does it take to talk?

Client and server

The Dark Ages

Work-arounds

:-(


      <script type="text/javascript" language="JavaScript">
        function processUpdates(updates) {
          // ...
          document.write('<script src="/updates/js" type="text/javascript" language="JavaScript"></script>');
        }
      </script>
      <script src="/updates/js" type="text/javascript" language="JavaScript"></script>
    

Enter XMLHttpRequest

:-)


      var req = new XMLHttpRequest();
      req.open('GET', '/updates/xhr', true); // async
      req.onreadystatechange = function() {
        // ...
      };
      req.send();
    

Long polling (Comet)

Long polling

Active listening


      req.onreadystatechange = function() {
        if (req.readyState === 4) {
          if (req.status === 200) {
            // Process the response and...
            poll();
          } else {
            setTimeout(poll, 5000);
          }
        }
      }
    

XHR issues

When in doubt, simplify

Server-sent Events


      const updates = new EventSource('/updates/sse');
      updates.onmessage = function(data) {};
    

Sockets for the masses

WebSocket


      const socket = new WebSocket('/updates/ws');
      socket.addEventListener('message', myMessageHandler);
      socket.addEventListener('open', function() {
        socket.send('hey, got any data?');
      });
      socket.addEventListener('error', function(error) {
        // Oops...
      });
      socket.open();
    

The difficulty

Libraries to the rescue

Credits

Questions?