[
https://issues.apache.org/jira/browse/SHINDIG-1050?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
John Hjelmstad resolved SHINDIG-1050.
-------------------------------------
Resolution: Fixed
Committed this code. See
http://shindig-dev.markmail.org/search/?q=rpc.js#query:rpc.js+page:1+mid:uvfylmfbjc362nsm+state:results
for further plans for rpc.js.
> Implement active-relay-less transport for non-window.postMessage WebKit
> browsers
> --------------------------------------------------------------------------------
>
> Key: SHINDIG-1050
> URL: https://issues.apache.org/jira/browse/SHINDIG-1050
> Project: Shindig
> Issue Type: Improvement
> Components: Javascript
> Affects Versions: trunk
> Reporter: John Hjelmstad
> Fix For: trunk
>
>
> I and Joey Schorr have implemented a "final" gadgets.rpc transport for use by
> all remaining significant browsers that still use IFPC (Safari < 4, Chrome 1).
> Dubbed RMR (Resizing Message Relay), this technique is identical to IFPC in
> terms of security: container-to-gadget communication occurs through a sibling
> IFRAME to the gadget on the gadget's protocol://host:port, with content
> passed in the fragment. G-to-C communication takes place by a child IFRAME to
> the gadget on the same domain as the container.
> However, rather than relying on code in the relay actively running and
> relaying the content to the receiver, the IFRAME's resize handler is used.
> Each receiver first obtains a reference to its relay file in the sender's
> context (polling is used for this step), attaching an onresize handler to it.
> This handler consumes the data on the IFRAME's fragment and processes it as
> IFPC would. In order to indicate to the sender that message(s) have been
> received, special ACK messages are sent by the receiver (optionally with
> additional messages for efficiency).
> This has two major benefits:
> 1. Much faster message passing. Latency per message is ~15ms vs. ~150-300ms
> for IFPC. Message passing appears to be more reliable than with IFPC as well.
> 2. No need to host a special active relay file (rpc_relay.html). In the
> context of WebKit (the only browser for which this method applies), *any* URL
> may be used as a relay. The implementation uses the receiver's
> protocol://host:port/robots.txt for this purpose. Even if the file doesn't
> exist, the resulting 404/500 is sufficient.
> Benefit #2 is of particular note. With this implementation, all major
> browsers are covered by gadgets.rpc with a fast, active-relay-less transport.
> This makes life much easier for containers:
> 1. Containers need not host rpc_relay.html any longer.
> 2. The parent= param passed to each gadget render need only be the
> container's protocol://host:port (window.location.href), and
> gadgets.rpc.setRelayUrl(...) is no longer strictly necessary, since it is
> just the gadget IFRAME's protocol://host:port, which can be processed from
> the IFRAME.src.
> 3. IFPC code can be removed from rpc.js.
> For the moment, I won't be removing IFPC however, since A) I'd like to
> solicit others' input on whether it's needed in any use case unknown to me;
> B) IFPC remains somewhat useful for messages sent before the various
> transport mechanism's "handshakes" are complete. In a followup, I plan to
> implement reliable early-message queueing to resolve this problem.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.