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:
- Create the WebSocket object using the cfwebsocket tag. For details, see Creating WebSocket object using cfwebsocket in Using WebSocket to broadcast messages.
- To send a message to the server, use the JavaScript method Invoke.
- 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.
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>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>