DevTools/Websocket/Roadmap

From MozillaWiki
Jump to: navigation, search


Overview

Developers should be able to debug and monitor websocket-based communications using Mozilla Firefox developer tools.

At a high level, the tool should allow for the inspection of websocket frames and for notifications for any of the major websocket state change events, such as open, close, errors, handshakes and protocol upgrade events.

It should also be possible for the community to extend the websocket monitoring framework to support specific protocol parsing so that protocols can also be monitored.

The platform work for websocket did not include any support for being able to debug and monitor websocket communications. As a result, any tooling will have to be preceded by some platform work to enable tooling.

Features at a Glance

Websocket frames

The heart of the tooling should enable developers to inspect individual websocket frames. Pretty much everything can be added on top of individual frame inspection.

Websocket state changes

http handshakes, Open, close, error and protocol upgrades are the major websocket events that should be visible in a tool.

Multiple websocket connections

Whatever tool we implement, it has to have support for multiple websocket connections. This could be achieved by providing a filter, or by having the UI display any websocket data based on each WS connection.

Protocol support

WS was designed specifically so that developers did not have to be constrained by the http protocol and instead can select the most appropriate protocol for the task they are trying to solve. For example. STOMP or AMQP are popular protocols for solving publish/subscribe type problems such as those encountered in stock market applications. SocketIO is a protocol that was loosely implemented for chat problems but is used extensively for many applications requiring basic real time messaging.

The most ubiquitous tasks for developers is to be able to inspect payloads for specific protocols. Such inspection includes both the payload itself (JSON, Binary JSON, binary) and the wrapper, such as message options and topic and subscription information, i.e. who is supposed to receive the message. The knowledge of the protocol is embedded in the protocol upgrade event, and if it's a readable protocol, our tool should be smart enough to use the right parser. Any given payload is an assembly of frames that have to be pieced together by the parser according to the protocol.

The three most popular open source protocols are SocketIO, STOMP, and AMQP, but AMQP does come in two distinct flavors, v. 0.9 and v. 1.0, both are in use and are very different. We should solicit the community to help us implement the parsers.

websocket extensions

The WS standard supports WS extensions. These allow specific vendors to add meta-data to frames so that additional functionality can be overlaid on a websocket stream independent of which protocol runs on the websocket connection. Our tools should be smart enough to decipher the content of the meta-frame data.


User stories

Existing Bugzilla tickets

Other Requirement Docs

OPEN QUESTIONS

Design Discussions

Platform APIs

Mockups

Latest Sketches

Competitive Analysis

Other Memory Tools
Tool Frame Inspection Protocol Specific Inspection Event/State Inspection Extensibility Connection Filtering Search WS Extension support
Fiddler
Chrome Tools  ?
IE11 DevTools

Visual Studio ???

Eclipse MAT

Chrome DevTools

IE11/VS2015

Current Mozilla Dev Tools