Coldfusion 10 - 使用Websockets进行一对一实时聊天

7

有没有人知道有哪些使用CF10 Websockets实现一对一实时聊天的示例或页面?我在网上找到的所有示例都是群聊,用户订阅某个频道。我需要的是可以有多个一对一聊天实例,就像您经常在允许您与支持代理之一聊天的网站上看到的Live Help Chat一样。非常感谢您的帮助,希望有示例(CF和JS)。


有人有任何想法吗?我的初步想法是创建一个聊天频道,对于客户发起的每个聊天,我都会在聊天的子频道上创建一个类似于chat.chat1的子频道。然后代理端将连接到该频道,这样就像一对一的聊天,但我不知道这是否是正确的方法。其他人是如何做的呢? - Guest
是的,我需要一些时间来编写一些概念验证代码。给我大约24小时,我会回复你的。 - Adam Cameron
太棒了!谢谢!在网上真的很难找到一个好的例子。 - Guest
是的,我真的很惊讶发现你发现了同样的问题:基本上所有的聊天演示都有点...嗯...错误:聊天不是广播。我正在努力解决这个问题,但今天时间已经用完了,直到周四我才能回来处理,恐怕要让你久等了。 - Adam Cameron
我一直在思考代理接口如何与Websockets配合工作。例如,一旦用户启动聊天,代理如何在其端通知并启动聊天以连接到该特定用户?如果有示例就更好了。 - Guest
例子有进展了吗?我使用广播方法生成子频道进行聊天,当用户点击聊天时可以正常工作。在管理员端,他们当前已订阅父级聊天通道,因此当用户打开聊天时,通知会正确显示在管理员端,并且我能够单击链接与用户连接。问题是,由于代理连接到父级聊天,用户无法看到消息。如果我尝试订阅子频道,它会说我已经订阅了父频道,如何让我们1对1? - Guest
3个回答

2

Ben Nadel撰写了一篇有关使用CF10的Websockets向目标用户推送消息的精彩文章(链接)。他甚至添加了一个漂亮的演示视频。这可能是你正在寻找的,或者至少可以帮助您入门。


谢谢Jan! 看起来很有趣,我会去了解一下。只希望它能在实时帮助聊天情境中正常工作,其中用户只是连接到代理的某个随机人员。 - Guest

1
这是一些我目前正在使用的示例代码。
不要使用subscribeTo属性,而是使用js函数订阅用户并传递一些头部值。然后可以使用这些标头作为筛选器在发布调用中使用selector
例如:
<cfwebsocket name="ChatSocket" onOpen="openHandler" onMessage="msgHandler" onError="errHandler">

<script>
    function openHandler(){
        //Subscribe to the channel, pass in headers for filtering later
        ChatSocket.subscribe('chatChannel',{name: '#Session.Auth.FirstName#', UserID: '#Session.Auth.UserID#', AccountID: '#Session.Auth.AccountID#' });
    }

    function publish(txt, userID){
        var msg = {
            AccountID: "#Session.Auth.AccountID#",
            publisher: '#Session.Auth.UserID#', 
            id: userID,
            message: converthtml(txt)
        };
        //When including headers, the "selector" is where you will filter who it goes to.
        var headers = {
            AccountID: "#Session.Auth.AccountID#",
            publisher: '#Session.Auth.UserID#', 
            id: userID,
            selector: "UserID eq '"+userID+"' and AccountID eq '#Session.Auth.AccountID#'"
        };
        ChatSocket.publish('chatChannel',msg, headers);

    }

    function msgHandler(message){
        console.log(message);
    }

    function errHandler(err){
        console.log(err);
    }
</script>

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接