怎样在IM系统中实现用户在线状态的实时显示

怎样在IM系统中实现用户在线状态的实时显示,第1张

据我所知,在MSN系统中,Client首先会连接一个固定的服务器,此服务器会返回一个新的连接服务器地址给Client,而后Client会重新连接到新的务器地址并开始登录。我想这样做是服务器端做到一个负载平衡的功能,也就是说有一个负载平衡服务器,有多个登录服务器。最终Client保持连接的是登录服务鳌
但是如果ClientA连接的是登录服务器A,而CientB连接的是登录服务器B,而ClientA和ClientB是好友,他们的在线状态是怎么得到的?
如果Client的数量比较少,那么登录服务器之间可以传递消息告知对方。但是当上万或者更多的时候。就不应该这样处理了。
那么有什么方式来实现类似的服务器网络结构中Client之间在线状态的实时显示呢?
(wyu2000 AT gmailcom)
正是我现在要面对的问题
我现在准备采取的策略是:
由客户端主动通知好友。
A 连接到 Login Server A 后。
我们假设A已经从主服务器获得了 好友列表,以及好友状态。
那么A可以主动发送LoginServerA 通知 在线好友B。
LoginServer的通知过程可以用如下方法:
ServerA,检索到好友B的登陆服务器(可以向主服务器请求Client B的登陆服务器,或者可以采用特定的ID算法,根据用户的ID计算出用户B的登陆服务器)
ServerA 发送一个ClientA登陆的消息给Server B,要求ServerB将该消息,转发给 Client B
大家给点意见。
目前我做的IM系统是通过服务器之间转发实现的,想想也没什么更好的办法,理论上每个Server可以达到几万,不过现实中,只有几十个用户/台。
引用
我提个方案:
首先做以下假设:
(1)维护100万在线用户的状态需要多大的内存空间
(2)从100万在线用户中检索出自己需要的数据需要多少时间
第一个问题我们可以这样来定性:
设每用户占用的内存空间为:
SessionID会话标识(int)+AccountID用户账号ID(int)+loginTime登录时间(long)+其它状态(假设用4个byte型幢昝4个状态)=20字节
100万用户20字节=20,000,000(字节)=19,53125K==19M(约)
注:一条记录就表示一个在线用户;
(我靠,我的计算是不是有错误,一台386的内存都够了)
看上去,似乎用一台服务器做状态服务器是没有什么问题的;
第二个问题,我们这样来定性:
假设在服务器端的内存中使用如hashTable这样的存储结构来保存用户的会话状态,hashTable的读 *** 作为0/m复杂度,从100万个记录中读取一条锹嫉难爸肥奔淠鞘窍嗟钡目斓,快到无法用毫秒来计算,只能用tick(一个CPU的时钟滴答)来计算。1个毫秒=10,000个tick(毫微秒),(has环Table的 *** 作平均值是多少我没有统计过不好意思。我就猜个值吧:假设平均为100个tick),如果每次存取hashtable要花费100Tick,另庠诩由弦恍┮滴翊淼氖奔洌桶床僮饕淮问荼硪1个毫秒来计算吧。
那么1秒钟的时间内就可以处理1000次用户的查询 *** 作;
问题是如果100万用户同时来查询我们该怎么办?
我想可以做负载均衡及服务器集群,当然还要涉汲到网络接口的流量限制,说来就话很长了。
总之,第二个问题看起来,似乎是我们可以通过其它的手段将单台服务器无法处理的工作量分摊到多台服务器中去进行;
于是可以得出第一个背景结论:
设置一台服务器将其做为用户状态服务器,用于记录系统中所有用户是否在线等状态信息;通过对服务器制作集群来分摊访问压力;
现在我们就可以做以下比较形象的结论和假设了:
(1)一个用户要查询自己所有好友的在线状态,那么这个用户向刚才所说到的状态服务器发送一条查询消息,服务器可以很快的返回用户的状态给客户;
(2)用户在登录系统后通知状态服务器自己已经登陆了。
(3)用户如果从某台具体的功能服务器掉线后,则由这台服务器通知状态服务器用户掉线;
(4)用户可能会在多台功能服务器中来回切换,由客户端与服务器端共同协作以判断用户是为否掉线;
(5)用户定期向状态服务器报告自己的存活状态,如果长时间不报告,则状态服务器把用户从自己的内存状态表中删除;
以上我的瞎解,不一定对,必竞自己没有做过,仅供参考。

首先:检查一下你设置时候输入的用户名和密码是否正确。
可以从新设置一遍,防止用户名或者密码错误导致无法连接而产生一直连接的状态。
其次:重新设置路由器以后,是否重启过路由器。
重启一次路由器试试,还有重新设置路由器的时候,一定要恢复路由器的出厂设置。
一直按着路由器后面的那个黑色按键就可以重置了。

该问题是因为游戏服务器异常造成的,通过WeGame能解决。步骤如下:

1、直接在电脑桌面上,点击图示的快捷方式跳转。

2、这个时候打开其中的首页,需要选择工具进入。

3、下一步d出新的窗口,继续找到英雄联盟并点击对应的游戏修复工具。

4、如果没问题,就显示正在检测以便进行修复。

5、这样一来等看到相关的结果以后,即可达到目的了。

你问的是服务器实现会话状态两种方式有什么吧,服务器实现会话状态的两种主要方式如下:
1、Cookie:Cookie是一种在客户端存储数据的技术,服务器端可以通过设置Cookie来实现会话跟踪和状态管理。当客户端向服务器发送请求时,服务器可以在响应头中设置Cookie,并将需要保存的会话状态信息写入到Cookie中。客户端在接收到响应后,会将Cookie存储在本地,下一次请求时会将Cookie发送给服务器,服务器可以根据Cookie中的信息来判断用户的身份和状态。
2、Session:Session是一种在服务器端存储数据的技术,服务器可以将会话状态信息存储在Session中,通过SessionID来实现会话跟踪和状态管理。当客户端向服务器发送请求时,服务器会为该客户端生成一个唯一的SessionID,并将SessionID返回给客户端。客户端在接收到响应后,每次请求都会携带该SessionID,服务器可以根据SessionID来获取该客户端对应的Session对象,从而获取和修改会话状态信息。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10554661.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-09
下一篇 2023-05-09

发表评论

登录后才能评论

评论列表(0条)

保存