5

ちょっとスタックオーバーフローがあります!私は現在Laravel3でコミュニティを開発しており、Facebookスタイルのプライベートメッセージを実現しようとしています。

私はコーディングの部分を行いましたが、私と私の友人は、リアルタイムのメッセージ通知を追加することに同意しています。私は自分の研究をしました、私はこれについて良い記事を見つけるとは言えません、それらのいくつかはoh you know everything about matrix so lets socketsocketsocketsocketsocket私が始める方法、どこから始めるか、とにかくこれは何ですか、これの多くはgo with MongoDB never use MySQL again.一体何を言っているのか混乱しています。私はMySQLを使用しています。Laravelで素敵なプライベートメッセージシステムを作成しました。リアルタイムの通知を追加したいと思います。

私がしたいのは

  1. UserAはUserBにメッセージを送信します
  2. privmsgテーブルに挿入されたメッセージ。
  3. ソケットまたはあなたが提案するものは何でも、UserAからの+1の新しいメッセージがあることをUserBのブラウザに伝えます
  4. UserBは、ページを更新せずに未読メッセージが1つあることを確認し、クリックして読んでいます。

どうすればこれを達成できますか?そのためのSocket.ioの最良の選択?もしそうなら、どうすればそれを使用できますか?どんなスニペットもとても素晴らしいでしょう!または私の状況についてのチュートリアル:)

本当にありがたいです

4

1 に答える 1

11

「Xは常にYよりも優れているので、常にXを使用する」という問題に悩まされています。おそらくそれの名前があります...多分1冊か2冊の本さえ書かれています。知るか。最初の質問から始めましょう:

とにかくこのたわごとは何ですか、これの多くは「MongoDBで行くことは二度とMySQLを使用しない」と言います。一体何だ?

あなたはそれを言った人と一緒に時間を過ごすのをやめるべきです。MySQLとMongoDBは、2つの非常に異なるタイプのデータベース用のデータベースシステムです。それらは、テーブルベースおよびドキュメントベースと呼ばれることがよくあります。MySQL(SQLを利用する他の多くのデータベース...そしておそらく利用しないデータベース)では、データは非常に特定のスキーマによって概説された一連のリレーショナルテーブルに格納されます。このテーブルの各レコードは、特定のタイプのセットを持つ特定のフィールドのセットに準拠しています。このタイプのデータベースは、さまざまな種類のデータに最適です。

MongoDBは、ドキュメントベースのさまざまなデータベースであり、一般に「NoSQL」(SQLだけではないことを意味します)と呼ばれます。各「ドキュメント」は、子と孫を持つノードを備えた全体構造を持つことができます。各ドキュメントには、独自のデータセットを含めることができます。ドキュメントは「コレクション」に保存されます。このタイプのデータベースにはいくつかの利点があります...特定のタイプの操作では非常に高速になる可能性があります。そうは言っても、すべて同じタイプのデータがたくさんある場合など、他のことにはひどいことです。このようなデータベースでは、データの集約が非常に遅くなります(ただし、常に改善されています)。

私が言いたいのは、MySQLとMongoDBは単なる異なるツールであり、異なるジョブ用に設計されているということです。友達がネジは釘よりも優れていると言ったからといって、ドライバーで釘を打ち込むのはやめましょう。

私がやりたいのは次のとおりです。UserAがUserBにメッセージを送信します。privmsgテーブルに挿入されたメッセージ。; ソケットまたはあなたが提案するものは何でも、UserAからの+1の新しいメッセージがあることをUserBのブラウザに伝えます。UserBは、ページを更新せずに未読メッセージが1つあることを確認し、クリックして読んでいます。

繰り返しますが、ジョブのツールを選択してください。あなたのツールが何であるかを知ることは良いスタートです。Socket.IOは、サーバーとクライアントの間に通信チャネルを設定することを目的としています。これは、Node.jsサーバーとWebブラウザーの間で一般的に使用されるWebソケットのような機能を提供します(ただし、他のコンテキストでも使用できます)。その2つの主な機能は、Web Socketsが利用できない場合にフォールバックトランスポートを提供し(古いブラウザーと互換性を持たせる)、イベントメッセージングシステムをいくつかの素晴らしくシンプルな呼び出しでラップすることです。基礎となるコミュニケーションについて心配する必要はありません。ちょうどemitそして一方の端でイベント、そしてそれはもう一方の端で解雇されます。単純。

サーバーとブラウザー間の実際の通信には、Socket.IOが最適です。ほぼリアルタイムの通信を提供します。ただし、Socket.IOは、すべての問題を解決する魔法ではありません。もしそうなら、それはほとんどすべての人にとって役に立たないでしょう。

メッセージは永続化する必要があるため、データベースに保存することをお勧めします。私がすること:

  1. メッセージ送信時に、データベースにコピーを挿入します
  2. 挿入時に、pub/subを介してクラスター内の他のサーバーに通知を送信します
  3. メッセージを受信するユーザーに接続しているサーバーには、他のサーバーからのこの通知が表示されます。
  4. そのサーバーは、データベースからユーザーのメッセージデータをロードし、Socket.IOを介して送信します。

チュートリアルが必要ですか?Socket.IOホームページの例は非常に優れています: http ://socket.io/

于 2013-01-26T08:01:48.983 に答える