客户端的数据有时候随着需求需要每秒钟及时更新数据
普遍的做法都是每秒轮询服务端的数据然后更新客户端
如果这样的话肯定会造成服务器压力过大等问题,因为要频繁地请求和频繁地做数据库查询操作。
那么有没有更好的解决方案,来解决此类问题呢?
先说说我现在的做法,我是用的长轮询方式,貌似就是大家说的服务器推吧。我不知道属于不属于服务器推,现在是一个请求过去之后 服务端做一个阻塞,服务端进行一个2分钟的轮询数据库,每一秒select一次直到数据库发生变化时,我返回一个true给客户端,然后客户端更新,这样是可以做到实时更新的。
但我的重点是如果减少每一秒select,因为客户端可能有50-100个左右,都用这种机制,服务器每秒钟做查询,这个靠谱吗?
现在是客户端安卓平板 + IIS服务器 + SQLSERVER2000
平板使用http协议进行post请求 服务器每秒查询数据库 然后查到更新或超过2分钟返回结果给客户端。
我是觉得服务器好累 怕它扛不住。
客户端轮询是最省力的方式,因为只涉及到查询,不涉及到连接保持,服务器可以通过缓存最新的数据的方式,来隔离数据库查询,客户端的每次查询总会从服务器的缓存中读取最新数据。
服务器推模式有两种,一种是Comet,也就是基于HTTP长连接服务器推技术,就是你在使用的,另一种就是真正的服务器推送模式,但是是基于TCP的。从性能上看,前者会比后者占用更多的服务器资源,后者会在实时性要求较高,而网络又允许的情况下使用。
服务器如何做缓存呢,每秒检测最新的。这要怎么缓存。我也想过缓存起来,不过没想通啊,请launcher指教。
@第五正: 所谓缓存就是把频繁使用的数据放到离你的Web Server最近的地方,通常来说就是宿主你的应用程序的进程的内存中。你可以可以使用第三方的缓存组件来简化缓存项的管理工作。基本的流程应该是这样,客户端每T时间间隔发起一次查询请求,服务器根据客户端请求中携带的上次已更新标记从本地缓存中读取到当前为止的所有匹配数据并返回给客户端,如果服务器本地缓存中没有则从数据库查询,从数据库查询的结果会用来更新本地的缓存。缓存项的过期策略需要根据你的数据的特点来制定,正确总结数据特点,将帮助你制定适当的过期策略。
看标签是andriod 那么是做安卓客户端咯 不太懂那个 不过可以给你一个思考的方向:注意看博问 你就会发现 如果有通知 那么是无刷新就提示你的 观察了很久 它是这么实现的 定时请求后台 如果有回复就提示,还有就是当用户点击浏览器(从最小化到最大化)也会发出异步请求(firebug里看出来的),这样服务器压力就小了
你的问题也可以这么处理:如果用户锁屏了 那么不请求 其他情况判断用户操作 如果一直操作着 那么定时请求 这么服务器压力会小点 仅供参考
先说说我现在的做法,我是用的长轮询方式,貌似就是大家说的服务器推吧。我不知道属于不属于服务器推,现在是一个请求过去之后 服务端做一个阻塞,服务端进行一个2分钟的轮询数据库,每一秒select一次直到数据库发生变化时,我返回一个true给客户端,然后客户端更新,这样是可以做到实时更新的。
但我的重点是如果减少每一秒select,因为客户端可能有50-100个左右,都用这种机制,服务器每秒钟做查询,这个靠谱吗?
现在是客户端安卓平板 + IIS服务器 + SQLSERVER2000
平板使用http协议进行post请求 服务器每秒查询数据库 然后查到更新或超过2分钟返回结果给客户端。
我是觉得服务器好累 怕它扛不住。
服务器推送啊
有的。Websocket HTML5中
如果你是.NET项目,微软最新出了一个组件SignalR,这个是一个开源项目可以实现长连接服务器推送功能,比较的不错!还在不断的更新中,希望对你有帮助
服务器推送,其实就是客户端轮询吧。我感觉所有的推送方式也就都是客户端不停的扫服务器。然后得到新数据。再更新页面。。