如何避免前端轮询太频繁对服务器造成压力

如何避免前端轮询太频繁对服务器造成压力,第1张

既然是微信,最佳的是做socket连接,不过需要你们服务端改造下,这样前端比较省心,服务端推送就好了

其次的方案是参考comet模式,发一个ajax请求出去后,服务器如果没有新消息,不要反回,hold住这个连接,直到有数据

前端要做三个事情:

第一个事情是由于http是短连接,一般浏览器都会设置一个超时时间,所以前端这个连接如果超过一定时间没有返回,需要abort掉,重新发起,推荐30秒

第二个事情是每次服务器有数据返回后,这个请求就结束了,你需要发起一个新的请求做监听;

第三个事情是多页面请求冲突问题,比较麻烦,不过如果你们是小游戏,应该是单页面应用就不用处理了,一般多页面应用或者WEB网站这类的,是通过localstorage来共享信息避免重发请求,也可以关掉前一个请求,在当前页面重新发起一个请求

不管哪种方案都要服务器端做改造,这不仅仅是前端自己的事,因为如果每一个连接都开一个线程,很快就会内存不够挂掉的。

我觉得首先要确定一下你思路是不是对的。用NSLOOKUP多次查询,看DNS到底指向是怎么样的情况。如果NSLOOKUP不能正确测试,就用PING,PING完后再用ipconfig /flushdns清除DNS,然后继续PING,重复多次测试。 如果确定是DNS指向不平均,那就看看2003服务器的设置。

如何实现服务器向客户端发出一条通知?

当向服务器数据库插入一条数据时,服务器就向客户端发出一条信息,让客户端及时知道;

如何实现呢?

能描述清楚点吗?问题太大概了吧。

向客户发送消息的sendMessage方法是不是已经准备好了?

那接下来就是选择在程序中100%确定已经向数据库插入了数据的地方调用sendMessage方法。

简单的实现可以用js的alert方法。

执行数据库插入操作,后返回值,js判断,根据返回的值,如果插入成功,则alert('插入成功')

ejb的拦截器应该能实现,给向数据库插入数据的这个方法加个拦截器,在这个拦截器类里边先调用这个方法,然后实现向客户端发消息

得看你做B/S还是C/S

看不懂说的啥。。

在消息库里插一条 消息数据。 再查询出来 不就好了。 这是简单的方式咯。 复杂点就用推送技术吧

基本上就两招:

要么是 短连接下的客户端发起轮询 模型;

要么是 长连接下的服务器端主动推送 模型。

C/S没玩过,B/S用过推模式,比轮询要好的多

我现在用的数据库连接字符串是private static string conStr = @"Data Source=192.168.1.37,1611Initial Catalog=QLYMUser ID=saPwd=system"这是局域网的!那连接服务器数据库应该什么写呢?

当服务器数据库数据有更新时,客户端如何及时知道?客户端是client的,轮询会对服务器有压力,有什么技术更好的?

客户端只设置两个,每分钟访问服务器一次,这样服务器的压力应该不大吧?


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/280784.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-21
下一篇2023-04-21

发表评论

登录后才能评论

评论列表(0条)

    保存