Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Channel vs. Broker vs. Destination in Websocket

Tags:

java

spring

What is the difference between channel vs. broker vs. destination in Spring websocket?

I recently started working with a websocket and from what I understood:

registry.addEndpoint("/wsocket/") adds a websocket endpoint which is solely used when clients wants to connect to the websocket service:

this.client.configure({
      brokerURL: `ws://localhost:9022/wsocket`,
      onConnect: () => {
        this.client.subscribe('/quote/fb', message => {
          console.log(message);
        });
      }
    });
    this.client.activate();

config.enableSimpleBroker("/quote") enables a channel/broker, letting clients to subscribe to it and receive messages published/sent over it. Clients are able to subscribe to any /quote/* on the server.

config.setApplicationDestinationPrefixes("/app") sets the application prefix, which clients use to send message directly to the app and not through the broker.

Is my understanding correct?

like image 459
Arian Avatar asked Nov 09 '18 02:11

Arian


People also ask

What is a broker in WebSockets?

A message broker acts as an intermediary platform when it comes to processing communication between two applications. In the context of spring websocket : When you use Spring's STOMP support, the Spring WebSocket application acts as the STOMP broker to clients.

What is STOMP in WebSockets?

STOMP, an acronym for Simple Text Oriented Messaging Protocol, is a simple HTTP-like protocol for interacting with any STOMP message broker. Any STOMP client can interact with the message broker and be interoperable among languages and platforms.

What is registerStompEndpoints?

The registerStompEndpoints method registers the “/chat” endpoint, enabling Spring's STOMP support. Keep in mind that we are also adding an endpoint here that works without the SockJS for the sake of elasticity. This endpoint, when prefixed with “/app”, is the endpoint that the ChatController.

What is enableStompBrokerRelay?

The enableStompBrokerRelay method returns a convenient Registration instance that exposes a fluent API. You can use this fluent API to configure your Broker relay: registry.


1 Answers

I think your understanding is correct .

Broker

A message broker acts as an intermediary platform when it comes to processing communication between two applications. In the context of spring websocket :

When you use Spring’s STOMP support, the Spring WebSocket application acts as the STOMP broker to clients. Messages are routed to @Controller message-handling methods or to a simple in-memory broker that keeps track of subscriptions and broadcasts messages to subscribed users. You can also configure Spring to work with a dedicated STOMP broker (such as RabbitMQ, ActiveMQ, and others) for the actual broadcasting of messages. In that case, Spring maintains TCP connections to the broker, relays messages to it, and passes messages from it down to connected WebSocket clients.

Channel

It can be thought of as a logical segregation of messages in one or both directions. For example, there can be three channels. One for request(incoming to the server), second one for response(outgoing from the server) and third one for error (outgoing from the server).

Destination

It can be thought of another level of hierarchical nesting for a channel. I find this image helpful to understand it :

https://docs.spring.io/spring/docs/5.1.3.BUILD-SNAPSHOT/spring-framework-reference/images/message-flow-simple-broker.png [![enter image description here][1]][1]

Clients can use the SEND or SUBSCRIBE commands to send or subscribe for messages, along with a destination header that describes what the message is about and who should receive it. This enables a simple publish-subscribe mechanism that you can use to send messages through the broker to other connected clients or to send messages to the server to request that some work be performed.

I find Spring documentation on this topic to be very helpful : https://docs.spring.io/spring/docs/5.1.3.BUILD-SNAPSHOT/spring-framework-reference/web.html#websocket-stomp-handle-simple-broker .

like image 161
K. M. Fazle Azim Babu Avatar answered Oct 21 '22 12:10

K. M. Fazle Azim Babu