Web Sockets in Canvas

The Canvas WebSocket connection is initiated by sending a WebSocket handshake request from a browser's HTTP connection to a server to upgrade the connection.
In the scenario of updating a UI component of a website at frequent intervals (e.g. stock rates or train details), the WebSockets serve as optimal solution where multiple calls to the server can be made by establishing a single connection. This decreases the serving time of the requests.


Steps to Publish and Subscribe to WebSockets:

  1. Enable WEB_SOCKET_ENABLED=Y property in the securityconfig property file.
  2. Create instance for WebSocketManager in your application class file.

    WebSocketManager webSocketManager=WebSocketManager.getInstance(); 
  3. Invoke the publishMessage method to publish the WebSocket from server to client.

    // Input argument : WebSocketPublisherBean instance with properties publisherName, header, message 
    webSocketManager.publishMessage();

    Sample: The following snippet publishes the custom message from WebSocket.

    package com.intellectdesign.modelhouse.websocket; 
    import com.intellectdesign.canvas.websocket.WebSocketManager;
    import com.intellectdesign.canvas.websocket.WebSocketPublisherBean; 
    import java.util.HashMap;
    import java.util.Map; 
    public class WebSocketMessagePublisher { 
    public static void customPublish(String publisherName,Map header,Map Message){ 
    WebSocketManager webSocketManager;
    webSocketManager = WebSocketManager.getInstance();
    WebSocketPublisherBean webSocketPublisherBean=new WebSocketPublisherBean();
    webSocketPublisherBean.setPublisherName(publisherName); 
    webSocketPublisherBean.setHeader(header);
    webSocketPublisherBean.setMessage(Message);
    webSocketManager.publishMessage(webSocketPublisherBean);
    } 
    public static void main(String[] args) {
    Map headerData=new HashMap();
    headerData.put("Test", "test1");
    Map bodyData=new HashMap();
    bodyData.put("data", "data1");
    WebSocketMessagePublisher.customPublish("monitor",headerData,bodyData);
    }
    }
  4. Subscribe with WebSocket channel. For the first time, the connection will be established with namespace ct.websocket.message.received.

    ct.MessageBus.subscribe('subscribename','ct.websocket.message.received'); 
    // subscribename => subscriber name 
    // ct.websocket.message.received => namespace and it will be always same 

    Sample: The following snippet subscribe establish & fetch data from web socket connection.

    ct.comm.MessageBus.subscribe('monitor','ct.websocket.message.received',this,function(data)
    {//business logic need to be done herealert('WELCOME TO WEBSOCKET'+data);
    });