问题描述
不使用Socket,不恒占用SQLServer连接。要怎么弄?谢谢!我知道的:心跳包方法:用户登录后,后台线程5秒更新一次Person表中的LiveTime到getdate()updatePersonsetLiveTime=getdate()whereLoginName=@LoginName;
然后设计OnlinePerson视图:select*fromPersonwheredatediff(s,LiveTime,getdate())>11;
但这样有个问题:当客户端网络不佳,后台线程更新时间就有可能大于10s或20s.
解决方案
解决方案二:
。。。网络问题不要用软件思维去解决。
解决方案三:
写接口定时传递
解决方案四:
记得以前学asp.net有这种类似的题目
解决方案五:
可不可以用SQLJob来实现这种控制?
解决方案六:
希望给点建议
解决方案七:
哪有这么玩的。。。简单点,登陆时,调用HTTP自己写一个接口进行登陆,接口返回登陆是否成功。1、登陆成功后接口编写代码记录在线人员列表等等。2、用户需要访问接口获取数据吧?如果超过10分钟什么什么的,就判定为不在线了。2、用户定时访问某个接口告诉服务器说自己在线。3、然后网络不佳,,不至于吧亲爱的,再不佳访问个接口可能也就是1kb数据都不到的事情,可能是别的地方卡了,可以找找看。还有咯直接访问数据库去更新,人数多了这个压力不小勒,用接口好点,或者用remoting或者用wcf~~当然最简单的还是用ASP.NET咯
解决方案八:
“客户端网络不佳”算是在线还是不在线呢?如果网络一直不佳,是一直在线还是一直不在线呢?这是个业务问题。如果你只是盯着代码,那么你就根本不认得自己已经写完的代码了。
解决方案九:
比如说你把11秒改为11“分钟”,那么假设恰好11分钟零1秒又有心跳了,怎么算呢?算是网络不佳么?那么你这个“网络不佳”就是个悖论,就像说“我说的是谎言”,你说我有没有说谎呢?纠结这个就是一种精神洁癖了。其实如果以11秒为规范,那就是“现在”用11秒来判断,大不了将来可以调整这个尺度。但是对于说什么“网络不佳”的必须是可以逻辑上说得通的,要让可以成事的人来决定尺度,而不能让永远败事儿的人来替你做决定。
解决方案十:
另外说一下你的OnlinePerson视图的代码,可能你比较随意,也可能是oracle之类系统造成的问题,写这类代码应该要使用能够用到索引的表达式,不要再比较表达式的左边随便用函数,因为这不能用到索引,会对性能产生严重影响(比如说会慢1万倍)。