Ashx+ajax怎么实现long

[复制链接]
查看11 | 回复10 | 2021-1-27 07:20:00 | 显示全部楼层 |阅读模式
想实现即时获取信息,查询百度,有人使用Thread.Sleep()的方式循环信息队列,当有新消息时往前端响应,再次进入循环。如此反复。但是本菜鸟测试后发现,用了这个循环,整个系统的ashx都无法访问,系统阻塞在这个循环里面了,我本以为这个应该是多线程的,而且即使ashx是单线程,但是不同ashx总不会只允许单个访问吧,难道IIS是单线程,不可能吧,我晕了,求解。
分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:20:00 | 显示全部楼层
不是循环,是CPU被这类线程任务“忙死”了,别的并发的重要事情根本干不了。
比如说有1000个客户端,当有消息的时候才通知客户端,那么任务操作是1。并且任务都是瞬间即时通讯到客户端的。
现在假设每个客户端每隔5秒钟轮询一次,那么就是说服务器端每隔5秒就至少要处理1000个无实际结果意义的巨大查询,每秒钟就要处理200个。而客户端还是要延迟5秒,用户体验很差(你一旦手工测试起来就会发现,延迟五秒的测试体验,看上去非常可笑)。
所以轮询只是不得已的办法,只是“玩儿玩儿”而已。根本不是及时网络通讯技术。
回复

使用道具 举报

千问 | 2021-1-27 07:20:00 | 显示全部楼层
至少从asp.net3.0版本以后,asp.net响应客户端请求就是线程的。
在线程并发方面并没有问题。问题是这样滥用了线程,一上线就把服务器搞死机了。
回复

使用道具 举报

千问 | 2021-1-27 07:20:00 | 显示全部楼层
引用1楼sp1234的回复:不是循环,是CPU被这类线程任务“忙死”了,别的并发的重要事情根本干不了。
比如说有1000个客户端,当有消息的时候才通知客户端,那么任务操作是1。并且任务都是瞬间即时通讯到客户端的。
现在假设每个客户端每隔5秒钟轮询一次,那么就是说服务器端每隔5秒就至少要处理1000个无实际结果意义的巨大查询,每秒钟就要处理200个。而客户端还是要延迟5秒,用户体验很差(你一旦手工测试起来就会发现,延迟五秒的测试体验,看上去非常可笑)。
所以轮询只是不得已的办法,只是“玩儿玩儿”而已。根本不是及时网络通讯技术。

那怎么办

???
回复

使用道具 举报

千问 | 2021-1-27 07:20:00 | 显示全部楼层
你如果不是“延迟5秒钟才轮询服务器”,比如说你是延迟5毫秒就轮询服务器一次(有些人就是会把5000误写为5),那这样的客户端在搞死服务器上就是“拼了”,就是恶意攻击服务器了。
回复

使用道具 举报

千问 | 2021-1-27 07:20:00 | 显示全部楼层
引用4楼sp1234的回复:你如果不是“延迟5秒钟才轮询服务器”,比如说你是延迟5毫秒就轮询服务器一次(有些人就是会把5000误写为5),那这样的客户端在搞死服务器上就是“拼了”,就是恶意攻击服务器了。
我要做一个收发信息的系统,也相当于即时通讯,因为收发必须及时通知。一开始就是简单的轮询,脚本设置定时查询服务器的缓存数据,但就是怕把服务器搞死,所以整整延迟到了5分钟,但也就意味着不能及时通知,系统就近乎没有意义了,然后查了查即时通讯,里面有介绍到这个long-polling,然后就入坑了。
回复

使用道具 举报

千问 | 2021-1-27 07:20:00 | 显示全部楼层
引用4楼sp1234的回复:你如果不是“延迟5秒钟才轮询服务器”,比如说你是延迟5毫秒就轮询服务器一次(有些人就是会把5000误写为5),那这样的客户端在搞死服务器上就是“拼了”,就是恶意攻击服务器了。
是不是ashx就不可能实现long-polling?
回复

使用道具 举报

千问 | 2021-1-27 07:20:00 | 显示全部楼层
你的这个ashx后台是否使用了Session之类的东西,写Session时,Asp.net会阻塞请求,像你这种long-polling用的不当导致程序变成单线程

回复

使用道具 举报

千问 | 2021-1-27 07:20:00 | 显示全部楼层
引用7楼yhb417的回复:你的这个ashx后台是否使用了Session之类的东西,写Session时,Asp.net会阻塞请求,像你这种long-polling用的不当导致程序变成单线程
是用了Session、cache、还有读取webconfig,但却是要用到这些东西,这怎么办?
回复

使用道具 举报

千问 | 2021-1-27 07:20:00 | 显示全部楼层
ashx有一个是否可以重用对象的属性。
这种解决方案不是坑,其实很常用的。

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行