IIS 对websocket长连接数有限制吗?

[复制链接]
查看11 | 回复10 | 2021-1-27 05:56:23 | 显示全部楼层 |阅读模式
我写了个网站,.net的,一个页面用到了Websocket,实时聊天那种,部署到IIS运行时,只要打开2个这个页面,然后整个网站就都锁死了,新打开的页面都一直在加载中,只要把那2个已经打开的页面关闭,新页面立刻就刷出来了!把vs附加到IIS进程调试时,打开第三个新页面,程序根本就不会进入我的代码,也就是请求被IIS截住了!
如果把这个页面中的长连接部分去除,那么无论打开多少这个页面,都不会导致整个站点锁定!
在vs2013中调试时没有这个情况!
分 -->
回复

使用道具 举报

千问 | 2021-1-27 05:56:23 | 显示全部楼层
非服务器版本的windows有10个入站限制
回复

使用道具 举报

千问 | 2021-1-27 05:56:23 | 显示全部楼层
不知道你所谓的websocket具体是什么。
websocket本身不走IIS,它跟http长连接最大的不同,就是它根本不坑IIS、也不坑浏览器端http并发数。它单独走tcp协议去访问websocket服务器。同时websocket信令也比传统的基于http的信令要小数倍。
你所谓的“部署到IIS运行时”,我不知道你部署了什么网站。你应该仔细看看你的代码,看看有没有逻辑设计bug。
比如说使用开源.net类库Fleck的websocket,就是它的网页https://github.com/statianzo/Fleck这样几行代码,你用一个console程序执行这几行代码,然后就能用几百个网页客户端去测试它。并不需要IIS。
那么你使用IIS的服务器程序,我不知道你是不是写得过于复杂了。反而“死掉”了。
回复

使用道具 举报

千问 | 2021-1-27 05:56:23 | 显示全部楼层
你应该检查一下(调试一下)你的http通讯,看看有没有异常巨大的消息。在websocket通讯时,你的http通讯应该是“不动的”。
asp.net之前应该是弄了一个“伪websocket”,也就是说它会自动地使用http长连接来模拟websocket,而不是真正websocket。不知道你是否使用了过时的、伪websocket功能的asp.net。
回复

使用道具 举报

千问 | 2021-1-27 05:56:23 | 显示全部楼层
现在就确定,用windowsservice方式来发布websocket服务器端,用console方式来测试它。不要使用asp.net,不要使用IIS。
这样你能在将来省许多事情。因为websocket服务器端编程跟asp.net网页编程,一点毛关系都没有。
websocket服务端设计开发,根本不应该作为asp.net平台下的开发计划。asp.net应该用来承载前端网页,以http方式下载各种资源文件到浏览器。而不应该承载websocket服务器端。如果你曾经通过asp.netSignalR尝了尝鲜,那么现在应该把它从asp.net中彻底剥离出来。
Websocket服务,将来是一个“大型消息服务系统”,通讯的是纯粹的自定义业务数据。而asp.net不过是做网页的。
回复

使用道具 举报

千问 | 2021-1-27 05:56:23 | 显示全部楼层
引用2楼sp1234的回复:不知道你所谓的websocket具体是什么。
websocket本身不走IIS,它跟http长连接最大的不同,就是它根本不坑IIS、也不坑浏览器端http并发数。它单独走tcp协议去访问websocket服务器。同时websocket信令也比传统的基于http的信令要小数倍。
你所谓的“部署到IIS运行时”,我不知道你部署了什么网站。你应该仔细看看你的代码,看看有没有逻辑设计bug。
比如说使用开源.net类库Fleck的websocket,就是它的网页https://github.com/statianzo/Fleck这样几行代码,你用一个console程序执行这几行代码,然后就能用几百个网页客户端去测试它。并不需要IIS。
那么你使用IIS的服务器程序,我不知道你是不是写得过于复杂了。反而“死掉”了。

我就用的.net里自带的Websocket功能,httphandler中判断请求是不是WebSocket,然后建立长连接
if(context.IsWebSocketRequest)
{
....
context.AcceptWebSocketRequest(skt.ProcessChat);
......
publicasyncTaskProcessChat(AspNetWebSocketContextcontext)
{
关键是,它在vs里调试的时候一点问题都没有啊

回复

使用道具 举报

千问 | 2021-1-27 05:56:23 | 显示全部楼层
现在我放到阿里云服务器上又出新问题了,浏览器里报错
ebSocketconnectionto'ws://m1.imilu.la/hd/groupsocket?GID=4'failed:ErrorduringWebSockethandshake:Unexpectedresponsecode:200
一个连接都不能建立
回复

使用道具 举报

千问 | 2021-1-27 05:56:23 | 显示全部楼层
看了sp1234的回复,我弄了个纯粹只有一个html页面,一个ashx页面的项目,就是避免上面说的本身代码有问题
代码完全粘贴自http://www.cnblogs.com/langu/archive/2013/12/22/3485676.html,无改动
发现还是一样,只要放到IIS,打开第一个页面,能建立长连接,再打开第二个页面,不能建立长连接,再打开第三个页面(页面打不开)...!

回复

使用道具 举报

千问 | 2021-1-27 05:56:23 | 显示全部楼层
问题解决了吗?我也遇到和你一样的问题了,Websocket部署在iis里面,多访问几次就网站锁死了。
回复

使用道具 举报

千问 | 2021-1-27 05:56:23 | 显示全部楼层
引用3楼sp1234的回复:你应该检查一下(调试一下)你的http通讯,看看有没有异常巨大的消息。在websocket通讯时,你的http通讯应该是“不动的”。
asp.net之前应该是弄了一个“伪websocket”,也就是说它会自动地使用http长连接来模拟websocket,而不是真正websocket。不知道你是否使用了过时的、伪websocket功能的asp.net。

你是我在csdn里面看到的最活跃的用户。。。。
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行