A client session can send a request message containing typed data
directly to a client session. The receiving client session can then send a response message
containing typed data. The request and response messages are addressed through the same
When a request message is sent to a specific client session and that session
responds, the following events occur:
A control client session sends a request message to a client session,
specifying the message path to send the message through and the session ID
of the client session to send the request message to.
The client session receives the request message through a request
The client session uses a responder to send a response to the request
The control client session receives the response.
Both the request message and the response message contain typed values. The messages
can contain data of one of the following types: JSON, binary, string, 64-bit
integer, or double. The response message is not required to be the same data type as
the request it responds to.
Sending a request to a session
Required permissions:send_to_session permission for the
specified message path and register_handler permission
Usually, it is a control client session in your organization's backend that sends
messages directly to other sessions.
Send the request message specifying the following information:
The session ID of the client session to send the request to
The message path to send the request and receive the response through
//Establish client session and control session
final Session control = Diffusion.sessions().principal("control").password("password").open("ws://localhost:8080");
final Session client = Diffusion.sessions().principal("client").password("password").open("ws://localhost:8080");
//Obtain the Messaging and MessagingControl features
final MessagingControl messagingControl = control.feature("MessagingControl.class");
final Messaging messaging = client.feature(Messaging.class);
//Create a JSON object to send as a request
final JSON request = Diffusion.dataTypes().json().fromJsonString("\"hello\"");
//Create a local request stream for the client to receive direct requests from the control session
messaging.setRequestStream("foo", JSON.class, JSON.class, requestStream);
//Send the request to a message path "foo" and wait for (at most) 5 seconds until the response is received.
final JSON response = messagingControl.sendRequest(client.getSessionId(), "foo", request, JSON.class, JSON.class).get(5, TimeUnit.SECONDS);
Responding to messages sent to a session
Required permissions:send_to_message_handler for the
specified message path
Define a request stream to receive and respond to request
messages that have a specific data type.
// Ensure to maintain a strong reference to your request stream as it
// is referenced weakly by the Diffusion client library.
NumberRequestStreamDelegate *delegate = [NumberRequestStreamDelegate new];
PTDiffusionRequestStream *requestStream = [PTDiffusionPrimitive int64RequestStreamWithDelegate:delegate];
[session.messaging setRequestStream:requestStream forPath:message_path];