Using WebSocket in point-to-point communication

Assume that the client need not send message to multiple clients. That is, the bi-directional communication is only between one client and server.

So unlike in the broadcast model, you do not need a channel for communication and therefore need not define it in the Application.cfc.

Do the following to set up a point-to-point communication:

  1. Create the WebSocket object using the cfwebsocket tag. For details, see Creating WebSocket object using cfwebsocket in Using WebSocket to broadcast messages.
  2. To send a message to the server, use the JavaScript method Invoke.
  3. To send additional messages, use the function WSSendMessage.

invoke

Description

Calls a particular function in the CFC. The value returned by the function in CFC is sent back to the client that invokes the method.

Syntax

invoke(CFCName, functionName [, argumentsArray])

Parameters

Parameter

Description

cfcName

The CFC filename (from where a specific function is called).

functionName

The function name in the CFC file.

argumentsArray

The function arguments as an array.

Usage

Use the function WSSendMessage to send additional message back to the client inside the function. To continuously send messages to a client you have to create a thread in the method that you invoke using invoke. Further, you can keep sending messages inside a thread.

Example

mycfwebsocketobject.invoke("employee","getdept",["eid_2"]);

WSSendMessage

Description

Sends messages to a specific client that invokes the method. This can be included as a part of the function that is called by the invoke WebSocket JavaScript method.

Returns

Nothing

Syntax

WSSendMessage(message)

Parameters

Parameters

Description

message

Required. The message object. This can be of type Any.

Example: Point-to-Point communication

The following example shows how to implement a point-to-point communication. In this example, you invoke three functions defined in mycfc.cfc.

  • Method f1 returns a value.
  • Method f2 expects an argument and returns a string. Also, client receives an additional message from the method WSSendMessage used in f2.
  • In the method f3, you create a thread that sends messages to the client at particular intervals.
  1. Create a CFM page index.cfm.

    <script type="text/javascript">
    function msgHandler(msgobj){
    var txt = document.getElementById("myDiv");
    var message = ColdFusion.JSON.encode(msgobj);
    txt.innerHTML += message + "<br >" + "<br>";
    }
    function invokecfcfn(){
    var fname= document.getElementById("fnname").value;
    if (fname == "f2") {
    alert("f2 selected");
    mysocket.invoke("mycfc", "f2", ["echo"]);
    }
    else
    mysocket.invoke("mycfc", fname);

    }
    </script>
    <cfwebsocket name="mysocket" onmessage="msgHandler"/>
    <form>
    <select id="fnname">
    <option>f1</option>
    <option >f2</option>
    <option>f3</option>
    </select>

    <input id="invokefn" name="invokefn" value="Invoke CFC function " type="button" onclick="invokecfcfn();">
    <div id="myDiv">
    </div>
    </form>

     

  2. Create a CFC mycfc.cfc that contains the function called from the client page.

    <cfcomponent>

    <cffunction name="f1" >
    <cfreturn "Message returned from f1">
    </cffunction>

    <cffunction name="f2" returntype="string" >
    <cfargument name="arg1" type="string" required="true" >
    <cfset msg= "Message from wsssendmessage of f2 which you called with arg " & arg1>
    <cfset wssendMessage(msg)>
    <cfreturn "Message returned from f2">
    </cffunction>

    <cffunction name="f3" >
    <cfthread action="run" name="t1" >
    <cfloop index="i" from="1" to="10">
    <cfset sleep(20000)>
    <cfset wssendMessage("Message #i# from wsssendmessage of f3 #now()#")>
    </cfloop>
    </cfthread>
    <cfreturn "Thread initiated in f3">
    </cffunction>
    </cfcomponent>

Get help faster and easier

New user?