VUE项目一直报错 GET http://localhost:9001/sockjs-node/info?t=1600331944800 net::ERR_CONNECTION_REFUSED

【问】为什么本地运行项目就会有这个请求呢? 而且我的项目也没有装这个依赖,通过webpack的打包依赖图发现包很大,并且它在请求的时候会会有一个很长的stalled状态。导致我的首页加载时间过长。

使用官方脚手架(vue-cli)搭建的项目启动的时候流程是这样:先启动一个本地 Web 服务器,然后将你的项目代码进行编译为浏览器能够直接运行的静态代码资源,然后放置到数据本地Web服务器的静态资源目录,再然后打开系统默认浏览器并访问这个本地 Web 服务器。同时建立"全双工[计算机网络用语,不理解自己百度哈]"的连接(就是文中的 sockjs-node)。 我们知道每当我们改了代码保存的时候本地开发环境会检测到文件改动,然后重新差量编译改动文件,并部署到本地web服务器,但是我们知道 HTTP 协议是无法做到 Web 服务器去主动通知客户端的,所以这里就使用到了上面建立的“全双工通道”,基于这个全双工通道浏览器就知道Web服务器资源发生了更新,我需要重新刷新来看到最新的效果。 这也就是开发环境下的“热更新”实现原理。 最后补充: 所以 sockjs-node 是开发环境的依赖,最后编译为生产环境的时候是不会包含这些依赖的,你可以在 package.json 中看到所有项目直接引用的“生产环境依赖 (npm install -s【s可缺省】 package-name)”和 “开发环境依赖生产环境依赖 (npm install -d package-name)“。不过你在 package.json 中看到的只是直接依赖,而这些依赖库一般都又是基于其他第三方依赖库做的开发,所以实际上你就会看到 node_model 文件夹会有很多依赖包,其实完整所有依赖可以在 package-lock.json 中看到。

 首先你要确定自己也是这个原因造成的(本地请求走了系统代理,导致请求失败),如果是这个要结合你自己使用的代理软件,通常情况下不使用全局代理就一般不会出现这种情况,出现了八成是都是用了全局代理,在全局代理的情况下你需要手动添加忽略规则(即vue项目启动时的那个非127.0.0.1 的局域网IP地址)。具体怎么添加这个就要根据你使用的代理软件自行查阅了。


解决 vue 项目一直出现 sockjs-node/info?t=1554978**** ,并造成浏览器不能及时更新编码改动结果


首先 sockjs-node 是一个JavaScript库,提供跨浏览器 JavaScript 的 API,创建了一个低延迟、全双工的浏览器和web服务器之间通信通道。

服务端:sockjs-node(https://github.com/sockjs/sockjs-node)
客户端:sockjs-clien(https://github.com/sockjs/sockjs-client)

我今天是在 Linux 下使用 Webstorm 写 Vue 项目遇到的该问题。现在已经找了问题真正的根源(至少是在我的环境是这样的),首先 sockjs-node 确实是维持全双工通信用的,关键在于为什么要有这个东西,其实其作用就是保证我们在改完代码重新编译之后,能够通知浏览器重新加载变更结果(我也是因为之前都可以改完代码之后浏览器可以及时刷新显示效果,但是今天却不能正常工作,其原因就在于该请求一直失败)。

所以剩下的就是排查问题,我看了这个请求的 IP 地址,使用的外部地址(如上图),此时想到因为我打开了 ShadowSockets ,并且排除规则里面只有本地地址,没有外部地址,所以该请求应该是走了代理,而我的外部地址并非公网 IP【10.19.245.12 只是局域网IP 】,所以代理之后的请求一定会得不到响应而失败。为了验证自己的猜测,使用 wireshark 抓包确认一下:

从上图可以看到,确实该请求被本地提供代理服务的 Shadowsocket 代理了。

既然找到原因,那我就将我的外部地址添加到代理忽略列表中就可以解决该问题【PS:由于每个人使用的代理软件可能存在差异,具体如何操作自己根据自己的情况百度即可】。此时该请求就变得正常了,同时浏览器也可以实时更新我的编码改动结果。

学以致用,勤动脑筋,记录此次有意思的折腾。
————————————————
原文链接:https://blog.csdn.net/gulang03/article/details/89217273


vue-cli 3+项目频繁发送‘sockjs-node/info’请求

在vue-cli3跑项目时发现了这个问题,浏览器一直在频繁发送这个请求,导致联调时很不方便,而且本地开发时项目也不能实时更新。

看了网上很多的解决方案,大多都是直接去node_modules包里找到sockjs-client.js并注释掉发送请求的源码,但是直接注释掉发现本地项目就无法实时更新了

在项目运行正常时我发现,这个请求在我本地修改代码以后会请求,同时浏览器实时更新,因此,注释掉并不是什么明智的选择。

还看到有可能是代理配置上出了问题,因此我检查了自己的代理配置。发现在代理配置的端口号与我本地运行的端口号不一致。

其实时因为我跑了两个项目,项目只是端口号不同,而我的这个有问题的项目A一直在向项目B发送热更新请求,端口号的不一致导致项目A频繁发送这个请求。

解决方法:直接将代理配置的端口号改成与项目一直的端口号就可以正常运行了。
————————————————
版权声明:本文为CSDN博主「鹿鹿安」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34996610/article/details/91380353


GET http://localhost:9001/sockjs-node/info?t=1600331944800 net::ERR_CONNECTION_REFUSED[亲测有效]

起因:当我想配置任何ip地址都能访问vue项目,操作:将config中的host 值由 localhost 改为了 0.0.0.0 之后,

随后再查看项目就出现了如下这个报错。

 打开详细一看,原来是这个地方报错了

 解决方案:
将 node_modules依赖中,sockjs-client/dist/sockjs.js,1606行注释掉。即可


————————————————

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
sockjs-client是一个用于在Web浏览器和服务器之间进行实时通信的JavaScript库。在跨域访问的环境下,sockjs-client提供了一种可靠且高效的解决方案。 跨域是指在浏览器中访问不同域上的资源。由于浏览器的同源策略限制,JavaScript在一个域中不能直接访问其他域的资源。然而,通过使用sockjs-client,我们可以在跨域环境下进行实时通信。 sockjs-client使用WebSocket作为主要传输协议,但在不支持WebSocket的浏览器中,它会自动回退到其他传输方式,如XHR流。这意味着无论浏览器是否支持WebSocket,sockjs-client都可以在跨域环境中发送和接收实时数据。 为了允许跨域访问,服务器需要配置CORS(跨域资源共享)。在服务器端,我们需要在响应中包含适当的CORS头,以允许浏览器从其他域访问服务器资源。这通常涉及到在服务器配置中添加一些特定的响应头,如"Access-Control-Allow-Origin"。 在sockjs-client中,我们只需要在JavaScript中创建一个SockJS客户端实例,并指定服务器URL。sockjs-client将为我们处理所有跨域访问和实时通信的细节。 总而言之,sockjs-client是一个能够在跨域环境下让浏览器与服务器进行实时通信的JavaScript库。它利用WebSocket和其他传输机制,提供了一种高效和可靠的解决方案。要在跨域环境下使用sockjs-client,服务器需要配置CORS头以允许跨域访问。通过使用sockjs-client,我们可以轻松地在跨域环境中实现实时通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值