2012-01-25 7 views
2

私はメッセージングシステムを開発しており、ユーザーが入力中であるかどうかを表示したいと考えています。どのように私はそれを行うだろうと思ったのは、誰が入力しているのか、誰が入力しているのか、そしてその時間の列を「タイプする」というデータベースのテーブルを持っているだけです。彼らは入力フィールドのキーを押すたびに、私はデータベースに投稿します(このようにサイトが遅くなると思われます)。次に、入力フィールドの列が5秒より古いかどうかを確認するjavascriptを実行し、そうでなければメッセージを表示します。「ユーザーは入力しています...」を他のユーザーに表示するにはどうすればよいですか?

これはかなり簡単な方法ですが、より良い選択肢があるかどうかは疑問でした。私はデータベースへのそのような頻繁な投稿に不快です。誰もこれが達成できるよりよい方法を知っていますか?どんな助けもありがとう、ありがとう。

+0

http://stackoverflow.com/questions/4428283/user-is-typing-a-message-function – j08691

+0

実行中のWebサーバースタックとは何ですか? – josh3736

答えて

4

あなたの考えを少し変えてみませんか?タイピングのために、サーバーではなくクライアントに負担をかける。

最初に keypressの後にイベントをサーバーに送信し、タイムアウトを開始します。 5秒後、もう入力しないと言うでしょう。別のキーを押すと、古いタイムアウトが消去され、新しいタイムアウトが開始されます。これにより、ユーザーが一貫して入力するたびに更新されます。

ユーザーがページを再読み込みしたり、ページから離れてしまった場合は問題です。次に、入力していませんが、タイムアウトが発生しません。これを処理するには、2つのことを行うことをお勧めします。まず、ユーザーが新しいページをリクエストすると、常にそのステータスがnot-typingになります。どうして?少なくとも2番目の時点では、新しいタブを開いていても入力していないからです。第2に、ユーザーがブラウザを離れて停止した入力トリガーの前に閉じると、最終的にそれらを消去したいと思うでしょう。あなたはおそらく、1時間ごとにcronを走らせることができ、5分以上経過しているものはまだ入力していると言いますが、入力しないと設定します。

+0

「サーバーにイベントを送信する」方法がわかりません。ある人のために何かをする方法を知っていて、別の人にそれがデータベースを使っているのを見せるようにする唯一の方法は...少し詳しく説明できますか?または私に参照を送る? – Ian

+0

@itdoell本当に、それはAJAXを使ってサーバー上のページにリクエストを送信し、そのページからデータベースにクエリを送信することです。 AJAXの使い方が分からない場合は、多くのリソースが必要です。 – Ktash

+0

ああ、私はAJAXの使い方を知っています。ありがとうございました。 – Ian

0

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

唯一の欠点は、メッセージを半分のままにしておくと、ユーザーがウィンドウを閉じるか、実現して戻ってきて、送信するか、またはクリアするまで、入力としてマークすることです。しかし、サーバーに送信する前に、ハーフ・タイプのメッセージが変更されたかどうかを検出できます。

0

あなたが長いポーリングをしていても、とてもシンプルなもののオーバーヘッドがたくさんあるようです(私は願っています)。これは実際にSQLに接続するバックエンドシステムに依存します。これを行うにはウェブソケットの使用を検討しましたか?真の全二重通信です。

0

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

関連する問題