signalr,在没有html5的情况下,是通过js不断的轮询拿数据
是拉得到返回值时,再去请送。
但是要注意的是,假设有100个页面,对IIS有100的并发,但它并不会查100次数据庘。他对数据庘的访问频率是恒定的。
如果简单的实现效果的话,应该是这样
刚一个request发给服务端以后,并不是立刻去查数据庘,而是在等一个标量,如果这个标量为零,则等100毫秒,再访问,直到这个标量为1,就去某个地方取到数据。
比如取数据的频率为一秒一次,则就算有100个并发,在一秒内也只取一次数据庘,只是有的请求需要等1秒。
这种需求很适合于取某人最新信息。
假立有10个页面,都要实时显示最新的信息数。你用js去一直轮询。
那么,你发一个请求参数为userid=1.
实际上,他先看某个全局的集合有没有userid=1的key,如果没有,插一个进去,tag=0,插个时间戳
然后for循环,间隔500毫秒,看这个tag是否为1.
如果,有,且tag=0,更新时间戳。
如果有,tag=1,更新时间在2秒内的,拿走数据,2秒外的,更新为0.
再循环。
而有另外一个进程,或程序也在论询这个集合,他从上到下,看每一条记录,如果tag=0,则查数据库,给对应的userid赋上数据,更新tag=1.
这样短时间内密集查询的,只会查一次数据库。