Homec4science

Modify the Aphlict client to use `LocalConnection`.

Authored by Joshua Spence <josh@joshuaspence.com> on May 29 2014, 16:04.

Description

Modify the Aphlict client to use LocalConnection.

Summary:
Ref T4324. Currently, an Aphlict client (with a corresponding connection to the Aphlict Server) is created for every tab that a user has open. This significantly affects the scalability of Aphlict as a service. Instead, we can use LocalConnection instances to coordinate the communication of multiple Aphlict clients to the server.

Similar functionality existed prior to D2704, but was removed as the author was not able to get this functionality working as intended. It seems that the main issue with the initial attempt was the use of the setTimeout function, which seemed to be a blocking call which prevented messages from being received. I have instead used an event-based model using a Timer object.

Roughly this works as follows:

  1. The first instance will create an AphlictClient and an AphlictMaster. The AphlictClient will register itself with the AphlictMaster and will consequently be notified of incoming messages.
  2. The AphlictClient is then responsible for pinging the AphlictMaster at regular intervals. If the client does not ping the master in a given period of time, the master will assume that the client is dead and will remove the client from the pool.
  3. Similarly, the AphlictMaster is required to respond to pings with a "pong" response. The pong response lets the clients know that the AphlictMaster is still alive. If the clients do not receive a pong in a given period of time, then the clients will attempt to spawn a new master.

Test Plan: I have tested this on our Phabricator install with a few tabs opened and inspecting the console output. I will upload a screencast of my test results.

Reviewers: #blessed_reviewers, epriestley

Reviewed By: #blessed_reviewers, epriestley

Subscribers: epriestley, Korvin

Maniphest Tasks: T4324

Differential Revision: https://secure.phabricator.com/D9327

Details

Committed
epriestley <git@epriestley.com>May 29 2014, 16:04
Pushed
aubortJan 31 2017, 17:16
Parents
rPH7f2b6412a2e8: Fix an issue with Phrequent where range_start might not be defined
Branches
Unknown
Tags
Unknown

Event Timeline

epriestley <git@epriestley.com> committed rPHa42ec32c98b6: Modify the Aphlict client to use `LocalConnection`. (authored by Joshua Spence <josh@joshuaspence.com>).May 29 2014, 16:04