Class PollingServerPush

java.lang.Object
org.zkoss.zk.ui.impl.PollingServerPush
All Implemented Interfaces:
ServerPush

public class PollingServerPush extends Object implements ServerPush
A server-push implementation that is based on client-polling.

Developer can control the frequency of the polling by setting the preferences as follows:

PollingServerPush.delay.min
The minimal delay to send the second polling request (unit: milliseconds). Default: 1000.
PollingServerPush.delay.max
The maximal delay to send the second polling request (unit: milliseconds). Default: 15000.
PollingServerPush.delay.factor
the delay factor. The real delay is the processing time multiplies the delay factor. For example, if the last request took 1 second to process, then the client polling will be delayed for 1 x factor seconds. Default: 5. The larger the factor is, the longer delay it tends to be.

Another way to control the frequency is to instantiate an instance with PollingServerPush(int, int, int), and then assign it with DesktopCtrl.enableServerPush(ServerPush).

desktop.enableServerPush(new PollingServerPush(1000, 5000, -1));
Since:
5.0.0
Author:
tomyeh
  • Constructor Summary

    Constructors
    Constructor
    Description
     
    PollingServerPush(int min, int max, int factor)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    activate(long timeout)
    Activate the current thread (which must be a server-push thread).
    boolean
    deactivate(boolean stop)
    Deactivates the current thread (which must be a server-push thread).
    protected String
    Returns the JavaScript codes to enable (a.k.a., start) the server push.
    protected String
    Returns the JavaScript codes to disable (a.k.a., stop) the server push.
    boolean
    Returns if the working thread of the server push is active.
    void
    Called when Events.ON_PIGGYBACK is received.
    void
    ZK-1777 resume serverpush after DesktopRecycling
    <T extends Event>
    void
    schedule(EventListener<T> listener, T event, Scheduler<T> scheduler)
    Called by the associated desktop to schedule a task to execute asynchronously.
    void
    start(Desktop desktop)
    Starts and initializes the server-push controller.
    protected void
    Sends an AU response to the client to start the server push.
    void
    Stops and cleans up the server-push controller.
    protected void
    Sends an AU response the client to stop the server push.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • PollingServerPush

      public PollingServerPush()
    • PollingServerPush

      public PollingServerPush(int min, int max, int factor)
      Parameters:
      min - the minimal delay before sending the second polling request (unit: milliseconds). If negative, the default is used (see PollingServerPush).
      max - the maximal delay before sending the second polling request (unit: milliseconds). If negative, the default is used (see PollingServerPush).
      factor - the delay factor. If negative, the default is used (see PollingServerPush).
      Since:
      5.0.4
  • Method Details

    • startClientPush

      protected void startClientPush()
      Sends an AU response to the client to start the server push. It is called by start(org.zkoss.zk.ui.Desktop).

      The derived class usually overrides this method to support different devices, such as ZK Mobile.

      The default implementation is to send AuScript containing the script returned by getStartScript(). Devices that don't support scripts could override this method to send a custom AU response (AuResponse).

    • stopClientPush

      protected void stopClientPush()
      Sends an AU response the client to stop the server push.

      The derived class usually overrides this method to support different devices, such as ZK Mobile.

      The default implementation is to send AuScript containing the script returned by getStopScript(). Devices that don't support scripts could override this method to send a custom AU response (AuResponse).

    • getStartScript

      protected String getStartScript()
      Returns the JavaScript codes to enable (a.k.a., start) the server push. It is called by startClientPush() to prepare the script of AuScript that will be sent to the client.
    • getStopScript

      protected String getStopScript()
      Returns the JavaScript codes to disable (a.k.a., stop) the server push. It is called by stopClientPush() to prepare the script of AuScript that will be sent to the client.
    • isActive

      public boolean isActive()
      Description copied from interface: ServerPush
      Returns if the working thread of the server push is active. In other words, it is true if it is between Executions.activate(org.zkoss.zk.ui.Desktop) and Executions.deactivate(org.zkoss.zk.ui.Desktop).
      Specified by:
      isActive in interface ServerPush
    • start

      public void start(Desktop desktop)
      Description copied from interface: ServerPush
      Starts and initializes the server-push controller. One server-push controller is associated with exactly one desktop.

      ServerPush.start(org.zkoss.zk.ui.Desktop) is called when Desktop.enableServerPush(boolean) is called to enable the server-push feature for the specified desktop.

      Specified by:
      start in interface ServerPush
    • resume

      public void resume()
      ZK-1777 resume serverpush after DesktopRecycling
      Specified by:
      resume in interface ServerPush
    • stop

      public void stop()
      Description copied from interface: ServerPush
      Stops and cleans up the server-push controller.

      ServerPush.stop() is called when Desktop.enableServerPush(boolean) is called to disable the server-push feature, or when the desktop is being removed.

      Specified by:
      stop in interface ServerPush
    • onPiggyback

      public void onPiggyback()
      Description copied from interface: ServerPush
      Called when Events.ON_PIGGYBACK is received. The invocation is passive (i.e., triggered by other events, rather than spontaneous).

      This method is called in the context of an event listener. In other words, the execution is activated and you can retrieve it by Executions.getCurrent().

      Specified by:
      onPiggyback in interface ServerPush
    • schedule

      public <T extends Event> void schedule(EventListener<T> listener, T event, Scheduler<T> scheduler)
      Description copied from interface: ServerPush
      Called by the associated desktop to schedule a task to execute asynchronously.

      The implementation usually delegates the scheduling to the scheduler passed as the third argument, which is controlled by the desktop. Of course, it could schedule it by itself.

      Specified by:
      schedule in interface ServerPush
      Parameters:
      listener - the task to execute
      event - the event to be passed to the task (i.e., the event listener). It could null or any instance as long as the task recognizes it.
      scheduler - the default scheduler to schedule the task. The implementation usually delegates the scheduling back to it. If you prefer to handle it by yourself, you could ignore it.
    • activate

      public boolean activate(long timeout) throws InterruptedException, DesktopUnavailableException
      Description copied from interface: ServerPush
      Activate the current thread (which must be a server-push thread). It causes the current thread to wait until the desktop is available to access, the desktop no longer exists, some other thread interrupts this thread, or a certain amount of real time has elapsed.

      The invoker of this method must invoke ServerPush.deactivate(boolean) in this finally clause.

      Note: the activation is applied to the desktop that was assigned by ServerPush.start(org.zkoss.zk.ui.Desktop).

      Unlike ServerPush.onPiggyback(), this method is NOT called in the context of an event listener. Rather, it is called in the thread of a server-push thread.

      Specified by:
      activate in interface ServerPush
      Parameters:
      timeout - the maximum time to wait in milliseconds. Ignored (i.e., never timeout) if non-positive.
      Returns:
      whether it is activated or it is timeout. The only reason it returns false is timeout.
      Throws:
      InterruptedException - if it is interrupted by other thread
      DesktopUnavailableException - if the desktop is removed (when activating).
    • deactivate

      public boolean deactivate(boolean stop)
      Description copied from interface: ServerPush
      Deactivates the current thread (which must be a server-push thread).
      Specified by:
      deactivate in interface ServerPush
      Parameters:
      stop - whether to stop after deactivate
      Returns:
      true if it is stopped
      See Also: