Details
-
Type: New Feature
-
Status: Closed
-
Priority: Major
-
Resolution: Fixed
-
Affects Version/s: 3.3
-
Component/s: JavaScript Client, Push Library
-
Labels:None
-
Environment:ICEpush, ICEpush service
-
Assignee Priority:P2
-
Affects:Documentation (User Guide, Ref. Guide, etc.)
Description
A push delivery window specified by delay and duration causes push updates to be delivered within a window o f time in the near future. This provides opportunities for moderating server load and improving application functionality.
With ICEpush, a single notification can rapidly notify a very
large number of (distributed) clients, each of which will suddenly
make a new HTTP request for their updates. These can easily be
new sockets, so can overwhelm the TCP accept queue and the
Servlet engine on the server (because the CPU and stack depth
requirements for processing an application request are much
heaver than that for handling an ICEpush request).
This can be resolved by introducing a "push delivery window":
essentially a time interval in the future specifying when the
notifications should occur. This can be specified as a delay
and a duration. For instance a push to "chat" with delay 5000
and duration 10000 would wait for 5 seconds to send push
notifications to the group "chat", spreading the network activity
over the following 10 seconds.
There are a variety of uses for this:
before the push occurs
scalability by throttling rapid updates to individual clients
Given two updates with delays and delivery durations,
if the duration regions overlap, a single notification can be
delivered within the region of overlap.
network traffic less bursty
allowing ICEpush to log a warning when it cannot meet QoS
requirements (more important for ICEpush-as-a-service)
as a demo feature (many of our demos have these push delays), or
say, a short sequence of delayed notifications to cover progress
of a background process
This can be added through the PushConfiguration API (which currently
allows Cloud Push to be configured), although the first priority is
actually to support it with the JavaScript API.