В прошлый раз, когда мне приходилось решать эту проблему, я использовал эту архитектуру:
Увеличить изображение
Веб-сервер предоставляет JavaScript/jQuery или флеш-чат.
После запуска чата клиент запрашивает у сервера все 1 секунду для новых сообщений.
Альтернатива опросу за 1 секунду
Если для вас это медленно, взгляните на websockets.
http://martinsikora.com/nodejs-and-websocket-simple-chat-tutorial
http://demo.cheyenne-server.org:8080/chat.html
Но веб-сокеты не могут быть предоставлены php. Там вам нужно заменить php + apchache на node.js или java.
Обычный метод HTTP PHP
В PHP вы подключитесь к PsyBnc, который будет опрашивать сообщения от сторонника для вас.
PsyBnc — это IRC бот.
Причина, по которой не следует напрямую подключаться к XMPP или BitlBee, заключается в том, что этим протоколам не нравится колеблющееся подключение и отключение от PHP. Поскольку вы не можете поддерживать сеанс в рабочем состоянии, вам нужно что-то, что сделано для частых и коротких подключений. Это PsyBnc.
Я бы использовал что-то вроде этого:
http://pear.php.net/package/Net_SmartIRC/download
<?php
session_start();
$message = $_GET['message'];
$client_name = $_GET['client_name'];
if (empty($_SESSION['chat_id'])) {
$_SESSION['chat_id'] = md5(time(). mt_rand(0, 999999));
}
if (empty($_SESSION['supporter'])) {
// how do you select the supporter?
// only choose a free?
// We send first message to all supporter and the first who grapped got the chat (where only 3 gues)
}
$irc_host = "127.0.0.1";
$irc_port = 6667; // Port of PsyBnc
$irc_password = "password_from_psy_bnc";
$irc_user = "username_from_psy_bnc";
include_once('Net/SmartIRC.php');
class message_reader
{
private $messages = array();
public function receive_messages(&$irc, &$data)
{
// result is send to #smartirc-test (we don't want to spam #test)
$this->messages[] = array(
'from' => $data->nick,
'message' => $data->message,
);
}
public function get_messages() {
return $this->messages;
}
}
$bot = &new message_reader();
$irc = &new Net_SmartIRC();
$irc->setDebug(SMARTIRC_DEBUG_ALL);
$irc->setUseSockets(TRUE);
$irc->registerActionhandler(SMARTIRC_TYPE_QUERY|SMARTIRC_TYPE_NOTICE, '^' . $_SESSION['chat_id'], $bot, 'receive_messages');
$irc->connect($irc_host, $irc_port);
$irc->login($_SESSION['chat_id'], $client_name, 0, $irc_user, $irc_password);
$irc->join(array('#bitlbee'));
$irc->listen();
$irc->disconnect();
// Send new Message to supporter
if (!empty($message)) {
$irc->message(SMARTIRC_TYPE_QUERY, $_SESSION['supporter'], $message);
}
echo json_encode(array('messages' => $bot->get_messages()));
Подключить мессенджер службы поддержки к PHP
У нас уже есть IRC-соединение с PsyBnc, теперь нам нужно отправлять сообщения из IRC в ICQ, XMPP, GOOGLE TALK, MSN, YAHOO, AOI...
Вот хорошее решение под названием BitlBee. BitlBee предлагает IRC-сервер, который может передавать сообщения почти со всеми протоколами мгновенных сообщений и на них. Псевдонимы этих учетных записей. Например вам для вашей системы нужен только 1 серверный аккаунт в google talk, icq... и вообще ваш саппорт в баддлист этих аккаунтов. Теперь BitleBee будет предоставлять ваш боддилист в виде IRC-чата.
person
GreenRover
schedule
17.01.2013