2013-05-24 2 views
7

Кто-нибудь знает о каких-либо примерах или страницах, которые я могу использовать, чтобы использовать Live один в одном чате с помощью веб-сокетов CF10? Все примеры, которые я нашел в сети, были те, что были в групповых чатах, где пользователи подписались на определенный канал. Мне это нужно, так что может быть много случаев одного чата, например, как работает чат Live Help, который вы часто видите на веб-сайтах, которые позволяют вам общаться с одним из агентов поддержки. Любая помощь приветствуется и, надеюсь, будут примеры (CF и JS).Coldfusion 10 - Live One on One chat with Websockets

+0

У кого-нибудь есть идеи? Моя первоначальная мысль заключалась в том, чтобы создать один канал чата и для каждого чата, инициированного клиентом, я создаю его на подканале чата, например chat.chat1 или что-то еще. Затем сторона агента будет подключаться к этому каналу, чтобы он был как чат один на один, но я не знаю, правильно ли это сделать. Как другие люди это делают? – Guest

+0

Да, да, но мне нужно найти некоторое время, чтобы сбить некоторые доказательства кода концепции. Дай мне около 24 часов, и я вернусь к тебе. –

+0

Отлично! Благодаря! Это очень трудно найти хороший пример для этого. – Guest

ответ

2

Ben Nadel имеет хорошую статью об использовании каркасов CF10 для pushing a message to a target user. Он даже добавил хорошее демо-видео. Это может быть то, что вы ищете или, по крайней мере, поможете вам начать работу.

+0

Спасибо Ян! Выглядит очень интересно и будет читать на нем.Просто надеюсь, что он будет работать в сценарии чата Live Help, где пользователь - это просто случайный человек, подключающийся к агенту. – 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

Сначала я думал о реализации что-то подобное, но есть некоторые зачаточные ограничения в CF10 как сейчас, что объезды меня от дальнейшего изучения.

  1. поддержка WSS отсутствует, см: Does CF10 support secure websocket wss?
  2. WebSocket не работает в среде кластера см: https://groups.google.com/forum/#!topic/houcfug/M7YQQyrBTaQ

я бы искать в другом месте для любого серьезного один-к-одному чата раствор, возможно Socket.IO on NodeJS или Java

WSS может поставляться в CF11. Я не уверен.