2013-05-24 13 views
7

Kennt jemand von Beispielen oder Seiten, die ich gehen kann, implementiert einen Live-Einzel-Chat mit dem CF10 Websockets? Alle Beispiele, die ich im Internet fand, waren diejenigen von Gruppenchats, bei denen Benutzer einen bestimmten Kanal abonniert haben. Ich brauche es, damit es viele Instanzen eines One-on-One-Chats geben kann, etwa wie ein Live Help Chat funktioniert, den Sie häufig auf Websites sehen, auf denen Sie mit einem der Support-Agenten chatten können. Jede Hilfe wird geschätzt und hoffentlich gibt es Beispiele (CF und JS).Coldfusion 10 - Live-One-on-One-Chat mit Websockets

+0

Wer hat eine Idee? Mein erster Gedanke war, einen Chat-Kanal zu erstellen, und für jeden Chat, den der Client initiiert, erstelle ich das auf einem Unterkanal des Chats wie chat.chat1 oder was auch immer. Dann würde sich die Agentenseite mit diesem Kanal verbinden, so dass es wie ein One-on-One-Chat wäre, aber ich weiß nicht, ob das der richtige Weg ist. Wie machen es andere Leute? – Guest

+0

Ja, das tue ich, aber ich muss etwas Zeit finden, um einen Proof-of-Concept-Code zu knacken. Gib mir ungefähr 24h und ich melde mich bei dir. –

+0

Großartig! Vielen Dank! Es ist wirklich schwierig, dafür ein gutes Beispiel zu finden. – Guest

Antwort

2

Ben Nadel hat einen schönen Artikel über die Verwendung von CF10-Websockets für pushing a message to a target user. Er fügte sogar ein nettes Demo-Video hinzu. Dies könnte das sein, wonach Sie suchen oder Ihnen zumindest helfen können.

+0

Danke Jan! Sieht wirklich interessant aus und wird darüber nachlesen.Ich hoffe nur, dass es im Live Help Chat-Szenario funktioniert, in dem der Benutzer nur eine zufällige Person ist, die sich mit dem Agenten verbindet. – Guest

1

Hier ist ein Beispielcode, der derzeit für mich arbeitet.

Anstatt das Attribut subscribeTo zu verwenden, verwenden Sie die Funktion js, um den Benutzer zu abonnieren und einige Headerwerte zu übergeben. Diese Header können dann als Filter auf dem Anruf verwendet werden, veröffentlichen mit selector

Beispiel:

<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

Zuerst dachte ich an etwas ähnliche Umsetzung aber es gibt einige rudimentären Einschränkungen in CF10 ab jetzt, dass Umwege mich von weiter untersuchen.

  1. WSS Unterstützung fehlt, siehe: Does CF10 support secure websocket wss?
  2. Websocket nicht in einer Cluster-Umgebung funktioniert, siehe: https://groups.google.com/forum/#!topic/houcfug/M7YQQyrBTaQ

ich für jeden ernsthaften Live-Chat-one-to-one woanders suchen würde Lösung, vielleicht Socket.IO on NodeJS oder Java

WSS möglicherweise in CF11 kommen. Ich bin mir nicht sicher.