2

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

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

  • 高级成员管理(登录名、头像、个人信息、存储伪供独家使用等)
  • 用户可以加入现有的聊天室或创建新的聊天室
  • 可以在每个公共聊天室中创建私人房间与任何人私下交谈
  • 可以通过根据其伪和/或 IP 地址驱逐成员来管理和管理每个聊天室,删除特定消息等
  • ETC...

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

我在学习新事物方面没有问题,但是网络上的大量教程向您展示如何使用 socket.io 进行聊天仅限于非常简约的(连接、写入、读取,仅此而已),这对于开始来说很好,但是对于更雄心勃勃的项目不是很有用。

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

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

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

有什么参考或建议吗?

谢谢你(对不起我糟糕的英语)。

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 回答