2

最も単純なチャット ルームを作成するための socket.io の「ハウツー」はたくさんありますが、より高度なチャット ルームでの使用方法を示すものは何も見つかりませんでした。

以下の特徴を持つチャットシステムを (php/mysql/ajax を使用して) ゼロから作成しました。

  • 高度な会員管理(ログイン、アバター、個人情報、専用の疑似保存など)
  • ユーザーは既存のチャットルームに参加するか、新しいチャットルームを作成できます
  • 各パブリックチャットルーム内にプライベートルームを作成して、誰とでもプライベートに話す可能性
  • 疑似アドレスおよび/またはIPアドレスに従ってメンバーを追放することにより、各チャットルームを管理およびモデレートする可能性、とりわけ特定のメッセージを削除する可能性
  • 等...

問題は、私が作成したシステムはあまりスケーラブルではないということです。オンラインのユーザーが多すぎるとサーバーをクラッシュさせる恐れのある短いポーリング手法を使用しているためです。どうやら、socket.io を使用するとその問題は解決しますが、サーバー側とクライアント側の両方で a から Z までの javascript を使用することを意味します (私は javascript 開発者ではなく、javascript ユーザーです)。

私は新しいことを学ぶことに問題はありませんが、チャットにsocket.ioを使用する方法を示すWeb上の大量のチュートリアルは、非常に最小限のもの(接続、書き込み、読み取り、それだけ)に限定されています。これは最初は問題ありませんが、より野心的なプロジェクトにはあまり役に立ちません。

また、socket.io を使用すると、データベースが見えなくなりますが、それに応じてシステムを再考する方法 (ユーザーとその個人情報を永続的に保存し、メッセージ履歴を取得し、以前のすべてのメッセージをフィルタリングし、15 個の以前のメッセージを表示する)ユーザーが自分自身を接続し、プライベート ルームからメインのパブリック ルームに行ったり来たりしながら、各ルームで期待していた以前のすべてのメッセージにアクセスできる場合など)。データベースがなければ、紙の上でさえ、これらすべてを達成する方法を理解できず、これについてはどこにも何も見つかりませんでした。

私のphp高度なチャットルームの既存のsoket.ioバージョンが見つかるとは思っていません。それは私が探しているものではありません。socket.ioを使用して上記の機能を備えたシステムを作成するために必要なすべての背景を提供する包括的なチュートリアル(無料または無料)を探しています。

2 日間ネットを検索しましたが、最も単純なチャット システムを超える方法がまだわかりません。何かを書いて、それをすべてのユーザーのブラウザにプッシュして読んでもらう方法を知っています。きれいだけど、さてどうする?

参考文献やアドバイスはありますか?

ありがとうございます(そして私の下手な英語で申し訳ありません)。

PS: "socket.io" と "tutorials" タグを使用しようとしましたが、それらが存在しても、何らかの理由で使用することはできません...

4

3 に答える 3

2

ノードベースのチャットに関する高度なチュートリアルが必要な場合。これをチェックして:

Nodechat.js の続き – 認証、プロファイル、ポニー、そしてより卑劣な socket.io

BackBone.Js 上に構築された Node.js と Socket.Js です。

于 2012-04-20T08:18:57.200 に答える
0

よりスケーラブルなチャットシステムについては、Meteor (www.meteor.com)を試しましたか。Node.Js上に構築されており、MongoDBに簡単に接続できます。

私見ですが、これはリアルタイムWebアプリケーションの作成に最適です。

于 2012-04-17T12:31:22.637 に答える
0

http://udidu.blogspot.co.il/2012/11/chat-evolution-nodejs-and-socketio.html

これは、チャット ルームを作成/参加/退出して、互いに会話できるユーザーを使用してアプリを構築するための非常に優れたチュートリアルです。それを拡張して、ルームの作成者に「権限」を与え、「管理者」としてフラグを立てると、理論的には、「ユーザーをミュート」、「ユーザーを禁止」などの管理コマンドをサーバーに送信できます。特定のメッセージを削除する」など..クライアントからこれらのメッセージをリッスンし、それまでにサーバーで処理するだけなので、非常に簡単です。

したがって、特定のユーザーがサーバー上で「管理者」としてフラグが立てられている場合、たとえば、彼がチャット ルームで誰かのメッセージを削除したい場合、サーバー上で次のようなことを行います: (大まかな例)

...
io.sockets.on('connection', function (socket){
    socket.on('deleteMessage', messages.delete );
});

var messages = {
    save : function(msg){
       // saves a message to the DB (which is sorted by rooms)
    },
    remove: function(user, data){
       // check if the 'user' is either an Admin or the person who wrote that message
       ...
       // if it's either one of them, then find that message in the DB, then
       // remove it, and update all clients' sockets.
       socket.emit('messageRemoved', data);
    },
    add: function(msg){
       // update all clients with current message
    },
    ...(more methods)
}
于 2013-05-08T11:19:28.607 に答える