node做多聊天室,添加聊天室这个功能怎么实现?
发布于 2 年前 作者 FirstYy 4434 次浏览 来自 问答

请各位大大帮我整理一下思路,实在是不知道怎么做了。

34 回复

自顶一下!

别沉啊!!!

node…node…node.js

roomId:{userid:user} 怎么样,添加就是新增roomId,进入这个频道或者叫房间玩家放到这个集合中

@nobody 我在网上看到刘哇勇的聊天室开发过程,大致了解一个聊天室是怎么产生的,可是怎么产生多个聊天室呢?我是node新手,多个聊天室应该要用到数据库吧?然后还有其它细节如果你有时间,请给我讲解一下。

@nobody 谢谢回复。

你的提问太简略,没法回答。起码得说下单个的聊天室怎么实现的

@gfafei 单个的话http://www.cnblogs.com/Wayou/p/hichat_built_with_nodejs_socket.html,这个很详细,我不知道怎么样才能将不同聊天室里的聊天信息隔离出来。

每个聊天室就是一个房间,有个roomID 房间里一群用户,聊天信息按照roomID分离不就好了,不用数据库的话就存到内存中 例如这样:两个房间1001 1002 {1001:[{user1:‘hello world’}.{user2:“hahaha”}], 1002:[{user1:‘hello world’}.{user2:“hahaha”}]}

可以参考下这个 也可以照@leiwei1991说的做

@leiwei1991 谢谢回复,那1001的实时聊天信息出现在1002怎么办?这个问题困扰了我很久

@gfafei 谢谢支持,会持续关注。

@FirstYy 不会出现这种问题吧,进入房间时,给每个玩家记一个房间号,user1:1001,把这个玩家说的话存在房间1001里

@leiwei1991 不同的房间所有说过的话可以用房间的房间号进行查找,但是即时信息怎么区分开?

@leiwei1991 请问一下这个即时聊天的话用mongodb还是mysql方便一些,我用mysql会出现一些不明所以的问题,如果方便,请指导一下

@pengliheng 谢谢了!正在关注。

@pengliheng 你好,再次打扰了,我还是不很明白多个聊天室中每个聊天室是什么样的一个模型,或者说是怎么创建出来的,另外假如我想给聊天室限制用户的访问权限,这个思路应该怎么做

权限是什么。。。。。不用做权限这个东西把,,如果不加入房间2,,直接不接受socket.emit,房间2 的信息, 后台通过login的时候就查询你在哪几个房间,将数据socket给前台,前台循环出这几个roomid,根本就没有设置权限这个步骤把。。。

@pengliheng 对你说到点子上了,循环出这几个roomid的话是以什么样的形式显示在前端呢?大致就是这个房间是由什么元素组成的? 谢谢回答!

@pengliheng 我咨询其他人时他们说了一个很重要的概念就是socket.io下的namespace

~ ~,不知道了。。没做这功能,,完全凭臆想。。。 假如有redux的数据结构是这样

{
  "nickName": "your nickname",
  "room1":[
  	"nameList": ["user A","user B","user C","...."],
  	"msgList": [
    	{
    		"nickName": "some user",
    		"msg": "some string"
  		},{
    		"nickName": "another user",
    		"msg": "another string"
  		}
  	] ,
	"room2":[
  		"nameList": ["user A","user B","user C","...."],
		"msgList": [
    	{
    		"nickName": "some user",
    		"msg": "some string"
  		},{
    		"nickName": "another user",
    		"msg": "another string"
  		}
	]
  ]
}

时刻更新这个大的对象通过socket.io实施更新。。应该可以实现吧,,我马上去试试看看这样是否可行。。。

我也在完善我的聊天室。。我理想中的功能是这样实现。。然而实际中,我还在捣鼓redux怎么和socket.io如何结合。。。实施更新状态。。目测准备换mobx来替代redux简单点。。 理想和现实还是有差距滴。。。。

通过js切换房间呗。。不然通过前台react-router-dom路由切换貌似更加合适。。

@pengliheng 恩 如果有合适的实现方法,请分享一下给我,也是分享给大家

推荐网易的pomelo

来自酷炫的 CNodeMD

@zhangmingfeng 非常感谢,持续关注中。

namespace功能。 前台从后台获取一系列房间列表, 将点击的房间名称发给后台,后台加载该房间管理员。房间名称,房间头像,成员等。。发给前台, 再socket.join用来加入房间。,前台页面切换房间的时候先socket.leave离开原先房间,然后socket.join加入所点击的房间,

post和get通过socket.emit单独发送信息给用户,前台发的聊天信息可以用io.of(‘some room’).emit发送给该房间所有用户,

我在我聊天室里面实现了切换房间功能,我用的mobx管理状态信息,因为还不会七牛cdn加速那套,所以页面加载速度要10s,

http://www.pipk.top

看下pomelo的频道那里

加一个聊天室id字段,再单独建一张聊天室id-聊天室名字的表

房间的队列里增加一条,之后加入的人订阅这个房间的消息。

@wangchaoduo 是的确实是这样做的

@stonephp 意思是增加路由管理?一个房间的id就是一条对应的路由,这样就解决我的问题,非常感谢你的回答

@beiyio 感谢答复!

@zhangmingfeng 这个是做游戏的吧?谢谢你的提示!

回到顶部