序
本文主要介绍WebSocket部署服务器无法连接外网的相关内容,分享给大家参考学习。下面我们就不多说了。我们来看看详细的介绍。
首先要说的是我遇到的问题:
与“ws://www.xxxx.com/xxx/xx”的网络套接字连接失败:网络套接字握手期间出错:意外响应代码: 200
网站绑定在服务器上,直接在服务器上访问webSocket服务是可行的,但是当我用外网访问时,这个错误就是我最大的敌人。在此之前,我遇到了几个小偷小摸,很容易解决。别提了,直接面对老板。
我花了两个下午寻找解决方案,但没有找到所有的解决方案。但是下面直接描述这个问题的人并不多。NET。然而,也有很多朋友面临这个问题。
这与浏览器问题无关。我已经用火狐、谷歌和IE测试过了,但还是会有问题。
开发平台:NET,它使用ASP.NET MVC来构建一个网站,并在其中提供WebSocket服务,目的是在网站中设计一个讨论平台。
具体来说:
首先,看看我的网页代码:
脚本类型=' text/JavaScript ' $(function(){ var URl=' ws ://xxxx : xx ' ' @ URl。操作(' request processcenter ')';var ws函数connect(){ ws=new WebSocket(URL);$('#TopicContent ')。追加('连接 n ');Ws。on open=function(){ $(' # topic content ')。追加(' connected n ');};ws . on message=function(evt){ console . log(evt . data);$('#TopicContent ')。追加(evt . data);};Ws。onclose=function(){ $(' # topic content ')。追加(' closed n ');};ws . onerror=function(evt){ console . log(evt . data);$('#TopicContent ')。追加(evt . data);};};$('#send ')。单击(function(){ console . log(1));console . log(ws . readystate);console.log(WebSocket。OPEN);if (ws.readyState==WebSocket。OPEN) { ws.send($('#content ')。val());$(这个)。val(“”);} else {$('#TextMessge ')。追加('连接关闭');} });$('#open ')。单击(function(){ connect();});$('#close ')。单击(function(){ ws . close();});});/脚本背景代码:
public void request processcenter(){ if(HttpContext。IsWebSocketRequest){ var curr user=getcurr user();这个。_用户名=货币用户。LoginNameHttpContext。AcceptWebSocketRequest(ProcessTopic);} else { httpcontext . response . write('请求失败');}}我认为WebSocket所需的url格式不会不匹配。
错误如下所示:
回到200,虽然请求成功了,结果却不是我们想要的。
请求方法确实是websocket,但是存在错误。为什么呢?我搜了很多资料,都没有找到真正的解决办法。可能我找的方式有问题,但是我看了百度的前三页,没有我想要的解决方案。自己做,做个测试,但是发现有效。
我在服务器上部署的网站使用默认端口80,访问将无效。如果webSocket不使用绑定到网站的同一个端口怎么办?
测试后:
1.本地80端口绑定域名webSocket使用该域名,端口80无效
2.本地80端口绑定域名webSocket对于使用2017端口主机地址的服务器ip地址有效
3.使用端口80时,本地端口2017的未绑定域名webSocket无效
4.通过使用2017端口,本地2017端口的未绑定域名网络套接字是有效的
概要端口80可能受到系统的限制
另一方面,插件域会影响无测试吗
成功解决了外网返回200却无法使用websocket服务的问题。
在这种情况下,需要注意的是,需要向IIS服务器添加两个网站,一个用于正常的80端口网页访问,另一个用于单独的WebSocket功能。这两个网站可以使用相同的程序版本。我就是这么做的。我没有什么好主意,菜鸟。
https://www.infoq.com/articles/Web-Sockets-Proxy-Servers
本网站介绍了websocket的一些知识,websocket默认使用80-433端口。也许我在想,当绑定到我的网站的端口和WebSocket绑定到同一个端口的时候,这个时候的外网请求是不是错了。这个问题暂时不彻底调查,暂时功能实现。但是我觉得这个解决方案不是很好,只能满足需求,不能简化需求流程。
留个猜测,我在服务器上访问的时候,是可行的,都是用端口80,websocket服务可以正常使用。这是因为当在服务器上启动时,我的本地服务被直接访问,所以防火墙不会阻止它。但是,当我使用外部网络访问时,网络访问规则可能会阻止我的请求,单击“连接”启动网络套接字服务的调用,服务端口也使用端口80,这导致防火墙识别问题。
或许猜想不合理,但我还是要靠分析问题的原因来解决我的问题。
摘要
以上就是本文的全部内容。希望本文的内容对大家的学习或工作有一定的参考价值。有问题可以留言交流。谢谢你的支持。