【问题标题】:Coldfusion 10 - Live One on One chat with WebsocketsColdfusion 10 - 与 Websockets 进行一对一聊天
【发布时间】:2013-05-24 20:21:59
【问题描述】:

有谁知道我可以访问的任何示例或页面,这些示例或页面使用 CF10 Websockets 实现一对一聊天? 我在网上找到的所有例子都是用户订阅某个频道的群聊。我需要它,以便可以有许多一对一聊天的实例,例如您经常在允许您与支持代理之一聊天的网站上看到的实时帮助聊天的工作方式。感谢您提供任何帮助,并希望有示例(CF 和 JS)。

【问题讨论】:

  • 有人知道吗?我最初的想法是创建一个聊天频道,对于客户发起的每个聊天,我都会在聊天的子频道上创建它,例如 chat.chat1 或其他。然后代理方将连接到该频道,因此就像一对一聊天,但我不知道这是否是正确的方法。其他人是怎么做的?
  • 是的,但我需要先找到一些时间来拼凑一些概念验证代码。给我大约 24 小时,我会回复你。
  • 太棒了!谢谢!很难找到一个很好的例子。
  • 是的,我真的很惊讶地发现你所做的一样:基本上所有的聊天演示都有点......好吧......错误:聊天不是' t 广播。我正在研究解决方案,但我今天没时间了,恐怕要到星期四才能回来。
  • 没问题。感谢您的帮助!

标签: coldfusion websocket coldfusion-10 livechat cfwebsocket


【解决方案1】:

Ben Nadel 有一篇关于使用 CF10 的 websockets for pushing a message to a target user 的好文章。他甚至添加了一个不错的演示视频。这可能是您正在寻找的,或者至少可以帮助您入门。

【讨论】:

  • 谢谢扬!看起来真的很有趣,会继续阅读。只是希望它能在实时帮助聊天场景中工作,其中用户只是连接到代理的随机人。
【解决方案2】:

这里是一些目前为我工作的示例代码。

不使用subscribeTo属性,而是使用js函数订阅用户并传入一些header值。然后可以使用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>

【讨论】:

    【解决方案3】:

    起初我在考虑实现类似的东西,但到目前为止,CF10 中存在一些基本限制,这使我无法进一步研究。

    1. 缺少 WSS 支持,请参阅:Does CF10 support secure websocket wss?
    2. Websocket 不能在集群环境中工作,请参阅:https://groups.google.com/forum/#!topic/houcfug/M7YQQyrBTaQ

    我会在别处寻找任何严肃的一对一实时聊天解决方案,可能是Socket.IO on NodeJSJava

    WSS 可能会出现在 CF11 中。我不确定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-06
      • 1970-01-01
      • 2011-03-10
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多