z***e 发帖数: 5393 | 1 像检查用户online/offline/idle这些状态,是在backend跑一个daemon一样的东西或者
开一个thread死循环不停(或者定时)检查每个用户么?
还是有什么其他巧妙的方法?不要每次让用户去poll,而要能在用户不作任何事情的情
况下更新status并publish出去。 |
g*****g 发帖数: 34805 | 2 不需要啊,胖客户端,服务器可以发起连接请求。
另一种做法是long poll.
【在 z***e 的大作中提到】 : 像检查用户online/offline/idle这些状态,是在backend跑一个daemon一样的东西或者 : 开一个thread死循环不停(或者定时)检查每个用户么? : 还是有什么其他巧妙的方法?不要每次让用户去poll,而要能在用户不作任何事情的情 : 况下更新status并publish出去。
|
g**e 发帖数: 6127 | 3 啥叫胖客户端?
【在 g*****g 的大作中提到】 : 不需要啊,胖客户端,服务器可以发起连接请求。 : 另一种做法是long poll.
|
g*****g 发帖数: 34805 | 4 web是瘦的,非web的是胖的。
【在 g**e 的大作中提到】 : 啥叫胖客户端?
|
z***e 发帖数: 5393 | 5 你意思是说客户端检查用户状态,比如一段时间不动了,然后客户端发起请求去update?
那么如果客户端突然关闭呢?比如我先是online状态,然后我把浏览器关了,就没有
client去update,那么这时候,server是不是自己仍然有个一直运行的东西去检查用户
状态?
【在 g*****g 的大作中提到】 : 不需要啊,胖客户端,服务器可以发起连接请求。 : 另一种做法是long poll.
|
c****p 发帖数: 6474 | 6 每个客户端应该有一个专门的数据结构,其中有time out信息。
time out时间跑完的时候自动把客户端踹下线。
update?
【在 z***e 的大作中提到】 : 你意思是说客户端检查用户状态,比如一段时间不动了,然后客户端发起请求去update? : 那么如果客户端突然关闭呢?比如我先是online状态,然后我把浏览器关了,就没有 : client去update,那么这时候,server是不是自己仍然有个一直运行的东西去检查用户 : 状态?
|
z***e 发帖数: 5393 | 7 OK,这个我理解,反正客户端判断用户状态,然后客户端update。
我的意思是,如果客户端突然崩溃了,比如电脑断电了,server怎么处理?如果当前状
态是online,而客户端突然崩溃,谁去把这个online改为offline?
如果是TCP连接,那么socket close/disconnect就可以说用户离线,但是如果是udp呢
?或者http这种sessionless的呢?我的意思是,server是否需要一个一直运行的东西
来检查每个client状态?还是只等着client来update?
【在 c****p 的大作中提到】 : 每个客户端应该有一个专门的数据结构,其中有time out信息。 : time out时间跑完的时候自动把客户端踹下线。 : : update?
|
g*****g 发帖数: 34805 | 8 http 用的是long poll,client发一个请求,阻塞在server端。
server端如果有更新,比如新的消息进来,就立刻把内容返回。如果
没有,就等够时间(比如3分钟),返回一个空响应。客户端每次
接到响应就立刻发下一个请求。通常server会逐渐提高这个timeout,
直到因为网络原因不成功再缩小。
【在 z***e 的大作中提到】 : OK,这个我理解,反正客户端判断用户状态,然后客户端update。 : 我的意思是,如果客户端突然崩溃了,比如电脑断电了,server怎么处理?如果当前状 : 态是online,而客户端突然崩溃,谁去把这个online改为offline? : 如果是TCP连接,那么socket close/disconnect就可以说用户离线,但是如果是udp呢 : ?或者http这种sessionless的呢?我的意思是,server是否需要一个一直运行的东西 : 来检查每个client状态?还是只等着client来update?
|
z***e 发帖数: 5393 | 9 我不是问long poll的实现问题...
【在 g*****g 的大作中提到】 : http 用的是long poll,client发一个请求,阻塞在server端。 : server端如果有更新,比如新的消息进来,就立刻把内容返回。如果 : 没有,就等够时间(比如3分钟),返回一个空响应。客户端每次 : 接到响应就立刻发下一个请求。通常server会逐渐提高这个timeout, : 直到因为网络原因不成功再缩小。
|
k*******d 发帖数: 701 | 10 偶想了个简单方法
假设如下
客户端每1分钟向服务器报告一次用户状态,
服务器端每1分钟5秒如果没接到报告就更改用户状态
实际运行情况如下
每次客户端以一报告,服务端同时把下次接受客户端报告的时间推后1分5秒
这样的话
只要客户端不断报告,服务器端就不用做任何动作
如果客户端一旦不报告了,服务器端等到一分钟的时候没反应,然后再过5秒总就更改
用户状态
这个怎么样? |
h**********c 发帖数: 4120 | 11 关于linux/unix,书上是如是说,unix kernnel用 trap 来响应硬件中断,可以理解为l/u
用硬件来回应socket event.
米骚系统的mfc有一个经典的例题,就是用busy loop poll message queue,所以不得不
poll.
本人对以上言论不负担任何责任,本人所承担责任即在适用的法律框架内删除或修改本
人网络评论. |