扣扣群消息发送机制是怎样的

shuaia 发布于 2013/04/17 17:42
阅读 2K+
收藏 3
一个扣扣群里有50人在线。其中一个发一条消息,发送给其他49个怎么发呢?循环49次?请了解或有看法的赐教。先谢过!
加载中
0
伊藤熊吉
伊藤熊吉

每个人都监听同一个服务器?

shuaia
shuaia
不一定哦,可能每个人的连接在不同机器上
0
纳兰清风
纳兰清风
应该是多播机制吧,在本地把那49个人的IP设为一个组
shuaia
shuaia
谢谢。我去了解了解。
纳兰清风
纳兰清风
回复 @shuaia : 广播和多播不同,广播是在一个子网中。而多播是指定IP的,具体的原理因为目前接触不到我也没细看,请参考《计算机网络自顶向下》
shuaia
shuaia
嗯,这个思路不错。不过到底是50还是49呢?还有广播机制后面是什么原理实现的啊?有相关资料么?想了解了解!
0
张亦俊
张亦俊

引用来自“纳兰清风”的答案

应该是多播机制吧,在本地把那49个人的IP设为一个组

我觉得应该不是多播(组播),因为现在有很多用路由器NAT上网的,他们并没有准确的IP,所以服务器不能主动连接他们。

应该是每个人启动QQ的时候挂一个TCP长连接到服务器上,服务器上有一个包含了每个群有哪些人以及对应的TCP连接的数据结构(可能是数据库表)。当有人发送消息到群的时候,服务器根据消息里的群号查找当前群在线的人的TCP连接并把消息发送过去。

0
纳兰清风
纳兰清风

引用来自“张亦俊”的答案

引用来自“纳兰清风”的答案

应该是多播机制吧,在本地把那49个人的IP设为一个组

我觉得应该多播(组播),因为现在有很多用路由器NAT上网的,他们并没有准确的IP,所以服务器不能主动连接他们。

应该是每个人启动QQ的时候挂一个TCP长连接到服务器上,服务器上有一个包含了每个群有哪些人以及对应的TCP连接的数据结构(可能是数据库表)。当有人发送消息到群的时候,服务器根据消息里的群号查找当前群在线的人的TCP连接并把消息发送过去。

+1
纳兰清风
纳兰清风
回复 @shuaia : 建议看看《UNIX网络编程》
shuaia
shuaia
其实我试着用scoket.io和redis弄了一个这么样的东西。能够记录当前群的所有在线人的socket的id。他们分布在不同的机器上。但是不知道怎么样实现广播或组播。。。
返回顶部
顶部