3

PHP を使用して、XMPP ベースのチャット サーバーにメッセージを送信したいと考えています。私は JAXL を使用しています。これは、純粋な PHP サーバー ベースのチャットに最適な (限られた) オプションのようです。

ただし、メッセージを送信するどころか、まだ接続を確立していません。問題が私のコード、私のサーバー (共有サーバーですが、Cpanel と非常に便利なホストを備えています)、または私の設定にある場合、問題を解決するのに苦労しています。

GTalk に接続するために使用しているコードは次のとおりです。

$client = new JAXL(array(
  'jid' => 'name@gmail.com',
  'pass' =>  'password',
  'host'=> 'talk.google.com',
  'port'=> 5222,
  'domain'=> 'gmail.com', //unsure if this is the right setting.
  'force_tls' => true,
  'auth_type' => @$argv[3] ? $argv[3] : 'PLAIN',
      ));


//
// required XEP's
//
$client->require_xep(array(
'0199'  // XMPP Ping
));

//
// add necessary event callbacks here
//

$client->add_cb('on_auth_success', function() {
global $client;
_info("got on_auth_success cb, jid ".$client->full_jid->to_string());

// fetch roster list
$client->get_roster();

// fetch vcard
$client->get_vcard();

// set status
$client->set_status("available!", "dnd", 10);
});
$client->add_cb('on_connect_error', function() {
echo 'Connect Error';
});
$client->add_cb('on_auth_failure', function() {
echo 'Auth Error';
});
$client->add_cb('on_auth_success', function() {
global $client;
echo 'connected';
$client->send_chat_msg('test2@domain.com', 'webtest');
$client->shutdown();
}); 

//
// finally start configured xmpp stream
//

$client->start(array(
'--with-debug-shell' => true,
'--with-unix-sock' => true
));
echo "done\n";

(ブラウザーから) php をトリガーすると、サーバーが動かなくなります。(「完了」メッセージはなく、ブラウザからのタイムアウトまで常にロードされます)

サーバーログが表示されます。

 strict mode enabled, adding exception handlers. Set 'strict'=>TRUE inside JAXL config to disable this[0m
 error handler called with 8, Undefined index: priv_dir,

そして、たくさん。

 unable to connect tcp://talk.google.com:5222 with error no: 110, error str: Connection timed out

そのため、次のいずれかについて助けていただければ幸いです。

  • 私のコードに関する特定の問題
  • 開始時の gtalk 接続設定に関する問題
  • この問題を調査するための代替の推奨事項。
  • または、JAXL の使用に成功した人々からの一般的なアドバイス。

ありがとう、トーマス・ローベル

4

1 に答える 1

0

OK問題は、ホスティングのTCPポートが閉じられている可能性があります。最初にホスティングで開いてみてください。また、コードをローカルで実行して、正常に動作するかどうかを確認してください。

一部の人々は、この問題がファイル XMLStream.php からのオーバーライド メソッド connect によって修正されたと報告しました。

  /**
 * Connect to XMPP Host
 *
 * @param integer $timeout
 * @param boolean $persistent
 * @param boolean $sendinit
 */
public function connect($timeout = 30, $persistent = false, $sendinit = true) {
    $this->sent_disconnect = false;
    $starttime = time();

    do {
        $this->disconnected = false;
        $this->sent_disconnect = false;
        if($persistent) {
            $conflag = STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT;
        } else {
            $conflag = STREAM_CLIENT_CONNECT;
        }
        $conntype = 'tcp';
        if($this->use_ssl) $conntype = 'ssl';
        $this->log->log("Connecting to $conntype://{$this->host}:{$this->port}");
        try {
            $this->socket = @stream_socket_client("$conntype://{$this->host}:{$this->port}", $errno, $errstr, $timeout, $conflag);
        } catch (Exception $e) {
            throw new XMPPHP_Exception($e->getMessage());
        }
        if(!$this->socket) {
            $this->log->log("Could not connect.",  XMPPHP_Log::LEVEL_ERROR);
            $this->disconnected = true;
            # Take it easy for a few seconds
            sleep(min($timeout, 5));
        }
    } while (!$this->socket/* && (time() - $starttime) < $timeout*/);

    if ($this->socket) {
        stream_set_blocking($this->socket, 0);
        if($sendinit) $this->send($this->stream_start);
    } else {
        throw new XMPPHP_Exception("Could not connect before timeout.");
    }
}
于 2014-04-26T12:03:40.980 に答える