You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by "René Cordier (Jira)" <se...@james.apache.org> on 2021/06/17 03:16:00 UTC
[jira] [Commented] (JAMES-3491) JMAP PUSH over WebSockets
[ https://issues.apache.org/jira/browse/JAMES-3491?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17364656#comment-17364656 ]
René Cordier commented on JAMES-3491:
-------------------------------------
[https://github.com/apache/james-project/pull/493] add some refactoring on this topic
> JMAP PUSH over WebSockets
> -------------------------
>
> Key: JAMES-3491
> URL: https://issues.apache.org/jira/browse/JAMES-3491
> Project: James Server
> Issue Type: New Feature
> Components: JMAP
> Reporter: Benoit Tellier
> Assignee: Antoine Duprat
> Priority: Major
> Fix For: 3.6.0
>
>
> We will implement [RFC-8887 - A JSON Meta Application Protocol (JMAP) Subprotocol for WebSocket](https://tools.ietf.org/html/rfc8887)
> as a transport mechanism for PUSH notifications.
> We will [generalize EventBus](0046-generalize-event-bus.md) in order to achieve an out-of-the box Publish-Subscribe
> system for JMAP related events, that do not fit in the mailbox API.
> We will implement listeners registered on the JMAP event bus for WebSocket clients in order to carry over state changes
> to the client.
> We expect clients using the PUSH to lead to a drastic performance enhancement, as less data needs to be transmitted upon
> resynchronisation.
> As mentioned in RFC-8887 the usage of webSockets allows other performance optimizations:
> - Requests can easily be compressed, which is not doable over HTTP for most available implementation (HTTP request
> compression is not ubiquitous).
> - WebSockets being connected, authentication can be performed once, when establishing the connection. This can allow to
> reduce the load, if needed, on authentication systems. It might ease the use for instance of custom OpenId connect
> providers.
> People deploying JMAP need to be aware that load-balancing webSockets requires session stickiness.
> {code:java}
> 1. Bob authenticates against the `ws://` endpoints. Upgrade to websockets is granted.
> 2. Bob registers Email and Mailbox updates. A listener listen for state changes related to Bob account.
> 3. Bob receives a mail. The MailboxManager adds it to bob mailbox. An `Added` event is fired on the mailbox event bus.
> 4. The `MailboxChangeListener` process the Added event, handles delegation, record the state change, and fires related
> events for each account on the JMAP event bus, for both `Email` (as there is an addition) and `Mailbox` (as the counts
> were updated).
> 5. Bob's webSocket listener receives a message from RabbitMQ and pushes it to bob.
> 6. Bob's MUA is aware it needs to re-synchronize. It will perform resynch requests combining `Email/changes`, `Email/get`,
> `Mailbox/changes` and `Mailbox/get`.
> {code}
--
This message was sent by Atlassian Jira
(v8.3.4#803005)
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org