我在哪里可以找到soket.io多房间聊天的高级教程?

时间:2012-04-17 12:26:50

标签: database sockets client-server chat

有很多socket.io“如何”来创建最简单的聊天室,但我没有发现如何将它用于更高级的聊天室。

我从头开始创建了一个具有以下特征的聊天系统(使用php / mysql / ajax):

  • 高级会员管理(登录,头像,个人信息,存储伪专用等)。
  • 用户可以加入现有聊天室或创建新聊天室
  • 可以在每个公共聊天室内创建私人房间与任何人私下交谈
  • 通过根据他的伪和/或IP地址驱逐成员来管理和调节每个聊天室的可能性,删除特定消息等
  • 等...

问题是我创建的系统不是很可扩展,因为它使用短轮询技术,如果我有太多的在线用户,可能会使服务器崩溃。 显然,使用socket.io将解决这个问题,但它意味着在服务器端和客户端使用从a到Z的javascript(我不是javascript开发者,只是一个javascript用户)。

我在学习新东西方面没有任何问题,但网上大量的教程向您展示如何使用socket.io进行聊天仅限于极简主义(连接,写入,读取,全部),这对于一个开始,但对一个更雄心勃勃的项目不是很有用。

它也接缝,使用socket.io,数据库不在图片中,但如何相应地重新考虑你的系统(永久存储用户和他的个人信息,检索消息历史记录,过滤所有以前的消息,显示当用户连接自己,从私人房间来回到主要公共房间时,先前的15条消息,同时仍然可以访问您希望在每个房间等的所有先前消息...等等。 没有数据库,我无法弄清楚,即使在纸面上,如何实现所有这一切,我在任何地方都找不到任何相关内容。

我不希望找到我的php高级聊天室的现有soket.io版本,这不是我想要的。我正在寻找全面的教程(免费或不免费),为我提供了使用socket.io创建具有上述功能的系统所需的所有背景。

我在网上搜索了两天,我仍然不知道如何超越最简单的聊天系统。我知道如何写一些内容并将其推送到所有用户浏览器以供他们阅读。它很整洁,但现在是什么?

任何参考或建议?

谢谢(抱歉我的英语不好)。

PS:我尝试使用“socket.io”和“tutorials”标签,但即使它们存在,无论出于何种原因,我都不允许使用它们......

3 个答案:

答案 0 :(得分:2)

如果您需要基于节点的聊天的高级教程。检查一下:

Nodechat.js continued – authentication, profiles, ponies, and a meaner socket.io

在BackBone.Js上构建Node.js和Socket.J。

答案 1 :(得分:0)

为了获得更好的可扩展聊天系统,您是否尝试过Meteor (www.meteor.com)。它基于Node.Js构建,可以轻松连接到MongoDB。

恕我直言,这是创建实时网络应用程序的最佳选择。

答案 2 :(得分:0)

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

这是一个非常好的教程,关于建立一个应用程序,用户可以创建/加入/离开聊天室并与他人交谈。您可以延伸,并给房间的创建者“权力”,将他标记为“ admin ”然后他理论上可以向服务器发出 admin 命令,这可能是“静音用户”,“禁止用户”,“删除某个消息”等等。这很简单,因为您所要做的就是从客户端收听这些消息,然后在服务器上执行操作。

因此,如果某个用户在服务器上被标记为“管理员”,然后让我们说,他想在聊天室中删除某人的消息,那么你在服务器上做这样的事情:(粗略的例子)

...
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)
}