Loop/Architecture: Difference between revisions

From MozillaWiki
Jump to navigation Jump to search
Line 11: Line 11:
* [[WebAPI/SimplePush|Simple Push]] ({{bug|976789}})
* [[WebAPI/SimplePush|Simple Push]] ({{bug|976789}})
* [[Labs/SocialAPI|Social API]] ({{bug|971987}})
* [[Labs/SocialAPI|Social API]] ({{bug|971987}})
* Marionette for client side unit-testing framework ({{bug|976127}})
* Marionette for automating client-side unit tests for build-system & tbpl ({{bug|976127}})


== Third-Party Technologies ==
== Third-Party Technologies ==

Revision as of 18:05, 21 April 2014

Design Goals

Underlying Technologies

Mozilla Technologies

The Loop project relies on a number of other technologies under development within Mozilla. These include the following:

Third-Party Technologies

  • Node.js for Loop server, at least through production
  • webl10n for Localization (bug 972884)
  • Mocha and Chai for client-side and standalone-page unit-testing framework (bug 976133)
  • Not using client CSS toolkit at the moment (this may be revisited) (bug 976854, bug 976857)

Open Issues

These technology choices will be moved into one of the preceding sections as decisions are made:

  • Client MVC Library + associated libs (bug 975548) -- Probably Backbone
  • Client-driven end-to-end framework (bug 976114)
  • Standalone-page end-to-end system testing framework (bug 976134)

Network Architecture

Network Diagram

Data Flows

Note that these are currently described in terms of a REST (or, at least, REST-like) interface on the Loop server. There is a significant possibility that this interface will evolve to be JSON objects exchanged on a WebSockets connection, similar to the network API exposed by the Simple Push Server.

User Connects

Endpoint Registration

User Generates "Call-Me" URL

"Call-Me" URL Generation

Non-User Clicks "Call-Me" URL

"Call-Me" URL Activation

User Rejects Call

Call Rejected

Note that the exact means by which Bob receives pending call status is still an open issue -- periodic polling is easy, but might not scale as well as we'd like. Long polling is a potential improvement, but also has scaling implications. Ultimately, websockets may be the preferred approach here.

User Blocks "Call-Me" URL

"Call-Me" URL Blocked

User Abandons Ringing Call

Calling User Abandons Ringing Call

User Calls Other User

Loop user calls other Loop user

Client Architecture

Address Book

Server Architecture

Database Schema