2

私はメッセージング システムを開発しており、ユーザーが入力しているかどうかを表示したいと考えています。私がそれを行う方法を考えたのは、データベースに「タイピング」と呼ばれるテーブルを作成し、誰が入力しているか、誰に入力しているか、および時間を列にすることです。彼らが入力フィールドでキーを押すたびに、私はデータベースに投稿します (ただし、これはサイトの速度を低下させるようです)。次に、入力フィールドの列が 5 秒より古いかどうかを確認する JavaScript を実行し、そうでない場合はメッセージを表示し、そうである場合は削除します。

これはかなり簡単な方法のようですが、より良いオプションがあるかどうか疑問に思っていました。データベースへのこのような頻繁な投稿に不快感を覚えます。それで、これを達成できるより良い方法を知っている人はいますか?どんな助けでも大歓迎です、ありがとう。

4

4 に答える 4

4

少し考え方を変えてみませんか。タイピングは、サーバーではなくクライアントに負担をかけてください。

最初のキー押下の後、イベントをサーバーに送信し、タイムアウトを開始します。5 秒後、これ以上入力していないと表示されます。別のキー押下がある場合、古いタイムアウトを消去し、新しいタイムアウトを開始します。これにより、ユーザーが一貫して入力しているときはいつでも更新されます。

ユーザーがページをリロードしたり、ページを離れたりする場合が問題です。次に、入力していませんが、タイムアウトはトリガーされません。これを処理するには、次の 2 つのことを行うことをお勧めします。まず、ユーザーが新しいページを要求するときは、常にステータスを に設定しnot-typingます。なんで?少なくとも、その瞬間、新しいタブを開いても入力していないからです。第二に、ユーザーがブラウザーを離れて入力停止トリガーの前に閉じた場合、最終的にそれらをクリーンアップする必要があります。おそらく、1 時間ごとに cron を実行し、5 分以上経ってもまだ入力中であると言って、入力しないように設定することができます。

于 2012-01-25T00:12:09.880 に答える
0

長いポーリングをしている場合でも、非常に単純なものには多くのオーバーヘッドがあるようです(私は願っています)。それは本当にSQLに接続しているバックエンドシステムに依存します。これを行うためにWebソケットを使用することを検討しましたか?それは真の全二重通信です。

于 2012-01-25T00:09:51.667 に答える
0

ユーザーの入力状態を失っても問題ないため、入力状態をmemcacheやredisなどにオフロードできます。また、値を読み取るだけで、ユーザーが最後の5秒間に入力したかどうかを他の人に伝えることができます。

于 2012-01-25T00:09:59.763 に答える
0

約 5 秒ごとに、テキスト入力の内容が空白かどうかを確認します。テキストがある場合は、ユーザーを入力中としてマークします。

唯一の欠点は、メッセージを半分タイプしたままにしておくと、ユーザーがウィンドウを閉じるか、気付いて戻ってきてメッセージを送信するか、メッセージを消去するまで、タイプしたとマークされることです。ただし、半分タイプされたメッセージが変更されたかどうかは、サーバーに送信する前に検出できます。

于 2012-01-25T00:05:57.070 に答える