7

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

4

3 回答 3

2

Ben Nadel has a nice article about using CF10's websockets for pushing a message to a target user. He even added a nice demo video. This might be what you are looking for or could at least help you get started.

于 2013-05-28T08:59:56.547 回答
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>
于 2013-12-04T18:33:38.733 回答
1

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

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

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

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

于 2013-12-04T18:56:30.740 回答