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



有大量 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"和"教程"标签,但即使它们存在,无论出于何种原因,我都不允许使用它们......

如果您需要

有关基于节点的聊天的高级教程。检查这个:

Nodechat.js继续 - 身份验证,配置文件,小马和一个更卑鄙的 socket.io

它是建立在BackBone.js上的Node.js和Socket.js。

对于更好的可扩展聊天系统,您是否尝试过Meteor(www.meteor.com)。它建立在Node.js上,可以轻松连接到MongoDB。

恕我直言,这最适合创建实时 Web 应用程序。

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

最新更新