2009-05-11 8 views
3

私がやっていることが絶対に正しいのか分かりません。しかし、ここで行く:チャットにPHP Jabber Stupid Question

  1. ユーザーログインを介してウェブベースのインターフェース
  2. ユーザーは
  3. ユーザーはさらにJabberのサーバーに接続するPHPファイルを後藤詳細に入る彗星経由のアップデートが通知され

問題は、ユーザーがメッセージを送信したいときに、単純な、phpを実行してjabberサーバーに接続してメッセージを送信することです。この問題は、私がメッセージを待っているときに発生します。私がログインしてメッセージをチェックして切断すると、他のユーザーのエンドで切断されたものとして表示されます。

は、私は間違った方法でこの問題に近づいているだろうか?その間にPHPレイヤーではなくJabberサーバーに(JavaScript経由で)直接接続する必要がありますか? PHP経由でメッセージを受け取る方法は?

ありがとうございます。

+0

オンラインでXユーザーがいる場合は、XのPHPインスタンスを実行する必要がありますか? –

答えて

0

これはhttpに固有の問題(または機能)です。永続的な接続はありません(実際はありません)。回避策が必要ですが、実際の解決策はありません。

あなたはそれをjavaやflashで行うことができますが、それは本当にうまくいきません(javascript 4tw!)。

もう1つの可能性は、ブラウザとWebサーバー間の接続をWebサーバーとJabberサーバー間の接続に変換する中間クライアントを作成することです。 は乱雑ですが、可能です。

またはこれに役立つAPIがあります。直接のjavascript
経由のjabberサーバに接続

私はおそらく、最新のAjaxの発明によって眠ったが、私の知る限り、あなたは唯一のソース・htmlファイルは、(greasmonkeyとアドオンを無視して)から来ているホストと通信することができます。 異なるドメイン、異なるポート、期間はありません。 jabberサーバーにchatpage-htmlをブラウザに提供する方法を教えない限り、問題が発生します。さらに、接続を維持することは、マルチパート応答を必要とするため、機能しません。それらはmozillaによってのみサポートされており、これはなぜ、醜い鴨のCOMETが最初の場所に存在するのかという理由です。彗星自体は、データの転送中に接続を保持できないことを回避するための回避策です。

+0

私は彗星、ジャバー、Apacheサーバを準備している。いろいろな問題をリンクする方法がありますか?すなわち、xmpphpを使ってメッセージを聞いて、メッセージが来るたびにデータベースに入れる方法/メッセージをユーザに送る方法?混乱しています。 –

+0

私はxmpphpパッケージに精通していません。私が考えることができるすべてのものを得るために考えることができる唯一の方法は少し複雑です。実際には、xmpphp経由でjabberサーバーと通信する別のクライアント(Apacheスクリプトではなく、cli/shellscript)を実行し、データベースにすべてログを記録し、ジャバーサーバーにプッシュするメッセージをデータベースから読み込む必要があると思います、すべてのvia(xmpphp)経由で、複数のjabber-usersをエミュレートします。異なるphp/javascript/cometがクライアントとデータベース間の通信を処理します。それが唯一の/最良の方法であるかどうかはわかりませんが、私は他の何かを考えることはできません。 – stefs

1

私はそれを試していませんが、xmpphpを見てください。第2に、ユーザーがWebサイトにログインしている間は、XMPPサーバー(別名Jabberサーバー)にログインしたままにしておくことを検討することをお勧めします。彼らはあなたのウェブサイトを離れ、戻ってこない場合に備えて、何らかのタイムアウトをしたいと思うかもしれません。

JavaScriptで接続する必要があるかどうかは、どうしてできなかったのか分かりません。私は、あなたにとって最もシンプルなものを探しに行くことをお勧めします。その場合、あなたは良いことを聞いているStropheをチェックしたいかもしれません。

広範に使用している唯一のXMPPライブラリはheadstockですが、これはpythonKamaeliaを使用する必要があります。

+0

私はXMPPHPの使用を計画していました。しかし、私はどのようにそれらを全期間にわたってログインさせ続けるのですか?迷っています。 httpバインディングはどうですか? –

+0

私は、他のユーザーにデータを送信する前にデータをログに記録して処理したかったので、間にPHPを使用したかったのです。 –

+0

データはどのように入手できますか?私はPHPが要求が来たときに目を覚まさなければならないと信じています。しかし、明らかに私はPHPを使って定期的にチェックしていますので、メッセージが失われてしまいます。 OpenFireを使用しようとしていますが、どういうわけか、メッセージが到着するたびにphpファイルを呼び出す必要があります。それが最善でしょうか?それは可能ですか? –

0

したがって、問題は、私が知る限り、相手側のJabberユーザーが応答するときです。そこにある問題は、少なくとも部分的には、ユーザーがJabberサーバー上の別のユーザーに応答しているにもかかわらず、この応答が接続を開いたままにしていることをPHPスクリプトが認識するようにしたいということですおそらく実行中ではありません)。本当に愚かな1いえ

1つのオプションは、次のとおりです。

  • 、送信して、ページ上のユーザーのための受信の両方のためのJabberサーバへの接続を仲介することができますPHPスクリプトを持っています
  • 使用AJAXユーザーに対してメッセージを送信する(AJAXスクリプトがメッセージを送信し、上記のスクリプトを指します。)

  • チェック、これまでに10秒程度を同じスクリプトにpingを実行Javascriptの無限ループを持っています〜でメッセージがあるかどうかを確認します。存在する場合、クライアントに渡され、ユーザーに出力されます。

上記持つ2つだけ問題があります。メッセージが送信されると、ユーザが接続されていない場合は

1)は、PHPスクリプトは、まだ見/メッセージを得るのだろうか?

2)3秒ごとにajaxリクエストを作成するクライアント側のループは、おそらく大きな負担になります。

解決方法2:

OpenFireジャバーサーバー。これには、Webチャットクライアントが組み込まれています。また、Fastpathと呼ばれるアドオンがあります。これはクライアント側でHTMLベースのチャットを処理するためのものです(あまりにも多くのサポートページの "今すぐエージェントとチャット!

私たちは仕事でこれを使用しています。これは非常にカスタマイズ可能で、他のスクリプトと統合することもできます(ログインのユーザーの詳細を入力したり、カスタムアバターを追加するなど)そしてそれ(OpenFire)には他にもたくさんの拡張機能やアドオンがあります。あなたが望むものでなければ、おそらくあなたが探しているものがあります。