2

私はホスティングアカウントを持っています。(cPanel または DirectAdmin) root アクセス権がないため、exec() または shell_exec() 関数を使用できません (サーバー管理者によってブロックされています)。

チャットの最善の方法はソケットプログラミングですが、次のようなターミナルコマンドが必要です。

PHP ./server.php

しかし、ターミナルにアクセスできません。

setTimeout()あまりにも多くの検索を行い、いくつかの方法を見つけましたが、チャット データベースまたはファイルへの接続にJavascript コマンドを使用しているため、パフォーマンスについてはわかりません。

setTimeout('refresh()',1000)1秒ごとにチャットデータベースに接続する代わりに、もっと良い方法があると思います。私の方法:

refresh=function()
{
//there is flag in session, true means there is new message from sender (session_set_save_handler)
//check flag value in the session, if its true then refresh chat database
}
setTimeout('refresh()',1000)

1秒ごとにデータベースに接続したくないため、フラグを使用しました。送信者からの新しいメッセージがない可能性がありますが、サーバーを1秒ごとに強制的に更新しています。

私の方法は良いですか?Server Root アクセスなしでチャット スクリプトを作成するためのより良い方法はありますか?

どうもありがとう。下手な英語でごめんなさい

4

3 に答える 3

1

ソケットを使用しない (または使用できない) 場合は、特定の時間内に jquery ajax を使用して、各クライアントで軽量の応答 php ページと自動更新スクリプトを混在させることが最善の解決策です。しかし、そのパフォーマンスは、アクティブなチャット ページの合計に大きく依存します。

パフォーマンスを向上させ、サーバーの処理時間を短縮するために、アクティブなすべてのセッションにアクセスするためのカスタム セッション ハンドラーを作成することは、毎回データベースをチェックする代わりに、リーダーに対して新しいメッセージが受信されたかどうかをチェックする良い方法だと思います。

特にトラフィックの多い時間帯に帯域幅を節約するために、JavaScript の次の setTimeout 遅延を ajax からの応答を受信して​​変更できます。

別の解決策は、データベース内の各メッセージに読み取りフラグを設定して、更新ごとにすべてのメッセージをリロードするのではなく、json で新しいメッセージのみを送信することです。

于 2013-11-14T01:04:56.793 に答える