Что ж, потенциально это огромная тема, но для пиков здесь есть некоторый код чата jquery + cfm + ajax, который я написал некоторое время назад и который может дать вам некоторые идеи:
ajax_chat_client.cfm
<div id="chatlog">
</div>
<input type="text" name="message" id="chat_message"> <input type="button" value="post" onclick="sendMessage()">
<br>Last HTTP Request made:
<span id="last_request_time"></span>
<style>
#chatlog {
width: 500px;
height: 300px;
overflow: auto;
border: thin black solid;
}
</style>
<script src="jquery-1.3.2.min.js" /></script>
<script>
var lastMessage = 0;
function sendMessage(){
$.get("ajax_chat_post.cfm?message=" + escape($("#chat_message").val()));
$("#chat_message").val("");
}
function checkNewPosts()
{
$("#last_request_time").html(new Date().getTime());
$.getJSON('ajax_chat_get.cfm?lastchat=' + lastMessage, function(data){
while(data.length > lastMessage)
{
$("#chatlog").prepend((lastMessage+1) + ') ' + data[lastMessage] + '<br>');
lastMessage++;
}
setTimeout(checkNewPosts(), 500);
});
}
$(document).ready(function(){
checkNewPosts();
});
</script>
ajax_chat_get.cfm
<cfapplication name="chatter">
<cfset threadLife = 30000><!--- thirty seconds --->
<cfset threadStart = getTickCount()>
<cfparam name="lastchat" default="0">
<cfif not IsDefined("application.chatlog")>
<cfset application.chatlog = ArrayNew(1)>
</cfif>
<cfloop condition="threadLife+threadStart GT getTickCount()">
<cfoutput>
<cfif ArrayLen(application.chatlog) GT lastchat>
#SerializeJSON(application.chatlog)#
<cfabort>
</cfif>
<cfthread action="sleep" duration="500" />
</cfoutput>
</cfloop>
<cfoutput>#SerializeJSON(ArrayNew(1))#</cfoutput>
ajax_chat_post.cfm
<cfapplication name="chatter">
<cfif not IsDefined("application.chatlog")>
<cfset application.chatlog = ArrayNew(1)>
</cfif>
<cfparam name="message" default="">
<cfif len(message)>
<cfset arrayAppend(application.chatlog, message)>
</cfif>