问题描述
我写了个网站,.net的,一个页面用到了Websocket,实时聊天那种,部署到IIS运行时,只要打开2个这个页面,然后整个网站就都锁死了,新打开的页面都一直在加载中,只要把那2个已经打开的页面关闭,新页面立刻就刷出来了!把vs附加到IIS进程调试时,打开第三个新页面,程序根本就不会进入我的代码,也就是请求被IIS截住了!如果把这个页面中的长连接部分去除,那么无论打开多少这个页面,都不会导致整个站点锁定!在vs2013中调试时没有这个情况!
解决方案
解决方案二:
非服务器版本的windows有10个入站限制
解决方案三:
不知道你所谓的websocket具体是什么。websocket本身不走IIS,它跟http长连接最大的不同,就是它根本不坑IIS、也不坑浏览器端http并发数。它单独走tcp协议去访问websocket服务器。同时websocket信令也比传统的基于http的信令要小数倍。你所谓的“部署到IIS运行时”,我不知道你部署了什么网站。你应该仔细看看你的代码,看看有没有逻辑设计bug。比如说使用开源.net类库Fleck的websocket,就是它的网页这样几行代码,你用一个console程序执行这几行代码,然后就能用几百个网页客户端去测试它。并不需要IIS。那么你使用IIS的服务器程序,我不知道你是不是写得过于复杂了。反而“死掉”了。
解决方案四:
你应该检查一下(调试一下)你的http通讯,看看有没有异常巨大的消息。在websocket通讯时,你的http通讯应该是“不动的”。asp.net之前应该是弄了一个“伪websocket”,也就是说它会自动地使用http长连接来模拟websocket,而不是真正websocket。不知道你是否使用了过时的、伪websocket功能的asp.net。
解决方案五:
现在就确定,用windowsservice方式来发布websocket服务器端,用console方式来测试它。不要使用asp.net,不要使用IIS。这样你能在将来省许多事情。因为websocket服务器端编程跟asp.net网页编程,一点毛关系都没有。websocket服务端设计开发,根本不应该作为asp.net平台下的开发计划。asp.net应该用来承载前端网页,以http方式下载各种资源文件到浏览器。而不应该承载websocket服务器端。如果你曾经通过asp.netSignalR尝了尝鲜,那么现在应该把它从asp.net中彻底剥离出来。Websocket服务,将来是一个“大型消息服务系统”,通讯的是纯粹的自定义业务数据。而asp.net不过是做网页的。
解决方案六:
引用2楼sp1234的回复:
不知道你所谓的websocket具体是什么。websocket本身不走IIS,它跟http长连接最大的不同,就是它根本不坑IIS、也不坑浏览器端http并发数。它单独走tcp协议去访问websocket服务器。同时websocket信令也比传统的基于http的信令要小数倍。你所谓的“部署到IIS运行时”,我不知道你部署了什么网站。你应该仔细看看你的代码,看看有没有逻辑设计bug。比如说使用开源.net类库Fleck的websocket,就是它的网页这样几行代码,你用一个console程序执行这几行代码,然后就能用几百个网页客户端去测试它。并不需要IIS。那么你使用IIS的服务器程序,我不知道你是不是写得过于复杂了。反而“死掉”了。
我就用的.net里自带的Websocket功能,httphandler中判断请求是不是WebSocket,然后建立长连接if(context.IsWebSocketRequest){....context.AcceptWebSocketRequest(skt.ProcessChat);......publicasyncTaskProcessChat(AspNetWebSocketContextcontext){关键是,它在vs里调试的时候一点问题都没有啊
解决方案七:
现在我放到阿里云服务器上又出新问题了,浏览器里报错ebSocketconnectionto'ws://m1.imilu.la/hd/groupsocket?GID=4'failed:ErrorduringWebSockethandshake:Unexpectedresponsecode:200一个连接都不能建立
解决方案八:
看了sp1234的回复,我弄了个纯粹只有一个html页面,一个ashx页面的项目,就是避免上面说的本身代码有问题代码完全粘贴自http://www.cnblogs.com/langu/archive/2013/12/22/3485676.html,无改动发现还是一样,只要放到IIS,打开第一个页面,能建立长连接,再打开第二个页面,不能建立长连接,再打开第三个页面(页面打不开)...!
解决方案九:
问题解决了吗?我也遇到和你一样的问题了,Websocket部署在iis里面,多访问几次就网站锁死了。