Premise's web server is unique to Premise and is integrated into its Windows Service (prkernel.exe).
I misspoke when I used the word "push". "Publish" would be more accurate. The client, more precisely the browser's ActiveX plugin called SysConnector, tells the server which objects are of interest to it. Premise publishes the state-changes for these 'subscribed' objects. SysConnector monitors the subscriptions and acts on state-changes. "Acts" means the client triggers server-side code which forces new information to be delivered and displayed in the client (and only in a specific region of the web-page). So, yes, it is all "pull" and the subscription is a means of signalling when it is time to pull.
I've attached an example of a super-simple web-site using SysConnector (NOTE: it is not the entire working example, just the HTML portion). This is not my work but was posted by the original Premise developers (many years ago) to demonstrate the operation of SysConnector. Believe me, it is much more difficult to learn how SysConnector works if you start with the thousands of lines of code in AutomationBrowser!
Here's a snippet of the file, explaining SysConnector's "SubscribeToProperty" method.
|*| "Subscribe to Property" - use to watch for property changes
|*|
|*| SYNTAX:
|*| connector.SubscribeToProperty(obj,prop,method,target,source)
|*| -obj as string (guid or sys path of object)
|*| -prop as string (name of property to subscribe to)
|*| -method as string [guid of object with method]:[name of method] -this method's purpose is to return the html to display when the property changes
|*| -target (always 'this')
|*| -source (always 'this')
|*|
|*| EXAMPLE:
|*| connector.SubscribeToProperty('{4BFA7919-93C9-4627-B90B-4C6C2008C30C}', 'PowerState', '{4BFA7919-93C9-4627-B90B-4C6C2008C30C}:getPowerStatusHTML()', this, this)
In the example above, SySConnector is subscribing to a Premise object whose GUID is that long-winded string. More precisely it is subscribing to state-changes to that object's PowerState property. When the object's PowerState changes state, the object's method called "getPowerStatusHTML()" is invoked. This method will generate HTML code depicting the object's new state.
The following snippet shows how to set the value of an object's property.
|*| "SetValue" - use to set a value of a property
|*|
|*| SYNTAX:
|*| connector.setValue(obj,prop,value)
|*| -obj as string (guid or sys path of object)
|*| -prop as string (name of property)
|*| -value as string (new value of the property)
|*|
|*| EXAMPLE:
|*| connector.SetValue('{4BFA7919-93C9-4627-B90B-4C6C2008C30C}', 'PowerState', 'False')
In the example above, SysConnector's SetValue method sets an object's (defined by the GUID) PowerState property to false.
That represents the basics and here is how it is implemented using HTML:
Subscription:
<span style="background-color:black;" ondataavailable="connector.SubscribeToProperty('{4BFA7919-93C9-4627-B90B-4C6C2008C30C}', 'PowerState', '{4BFA7919-93C9-4627-B90B-4C6C2008C30C}:getPowerStatus()', this, this)"> ... etc ... </span>
Note the use of Internet Explorer's proprietary "on data available" tag in the span element.
SetValue:
<td style="cursor:hand;" bgcolor='gray' onclick="connector.SetValue('{4BFA7919-93C9-4627-B90B-4C6C2008C30C}', 'PowerState', 'False')"><b>TURN OFF</b></td>
That's how SYSConnector allows AutomationBrowser to seemingly "push" state-changes from the server to the client. In fact, the client instructs the server what it is interested in and then, when a state-change occurs, it triggers a server-side script (belonging to the object) to deliver fresh HTML to render the new state. Pretty neat but SYSConnector only runs with IE on Windows.
FWIW, SysConnector's methods are a tiny subset of what is found in MiniBroker.
The attached image is Premise Builder displaying the WebSubscriptions in effect as a result of a single active Session. The Session is servicing a web page rendered by AutomationBrowser.