由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 像QQ/FB chat/GTalk这些是怎么实时检查用户状态?
相关主题
PHP/JSP/ASP等页面语言应该被慢慢抛弃了吧?拜托你们快动手做吧,每人做一个系统,一个测试客户端
求推荐编程方式我想用Python做个群发短信功能,不知道有没有现成的模板
在服务器端如何确认一个文件已经ftp传输完毕? (转载)普通TCP还是HTTP?
TLS client certificate (转载)开始折腾DPDK+mTCP
关于web client连接server的问题其实有时候google多了会脑残的
求解:socket client用node.js, socket server用c++请问怎么记录tcp连接的时候从发出synack到收到ack的时间?
问一个思路:如何创建并监听虚拟网卡[合集] 老是关心语言快慢的人看过来
UDP广播老是接收不到不明白为什么总有人要去刻意贬低.NET
相关话题的讨论汇总
话题: 客户端话题: 检查用户话题: 状态话题: 用户话题: fb
进入Programming版参与讨论
1 (共1页)
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.
本人对以上言论不负担任何责任,本人所承担责任即在适用的法律框架内删除或修改本
人网络评论.
1 (共1页)
进入Programming版参与讨论
相关主题
不明白为什么总有人要去刻意贬低.NET关于web client连接server的问题
大家谈谈家电上网的服务器端的设计如何求解:socket client用node.js, socket server用c++
HBase的用户验证问题问一个思路:如何创建并监听虚拟网卡
贴个ionic/angular/phonegap的成功appUDP广播老是接收不到
PHP/JSP/ASP等页面语言应该被慢慢抛弃了吧?拜托你们快动手做吧,每人做一个系统,一个测试客户端
求推荐编程方式我想用Python做个群发短信功能,不知道有没有现成的模板
在服务器端如何确认一个文件已经ftp传输完毕? (转载)普通TCP还是HTTP?
TLS client certificate (转载)开始折腾DPDK+mTCP
相关话题的讨论汇总
话题: 客户端话题: 检查用户话题: 状态话题: 用户话题: fb