文档章节

Nginx代理webSocket经常中断的解决方案, 如何保持长连接

jack__0023
 jack__0023
发布于 2017/08/02 17:48
字数 529
阅读 1051
收藏 61
点赞 0
评论 9

背景

这天气够热的,要处理的事情也够多的。。。。

想看解决的,直接 ctrl+f搜索关键字‘配置点’##

开始前交代(想看原因的看这个,个人观点,不代表正确)##

解说:今天用nginx反代通讯项目,发现平均1分钟左右,就会出现webSocket连接中断,然后查看了一下,是nginx出现的问题。

原因是:nginx等待你 第一次通讯和第二次通讯的时间差超过了它设定的最大等待时间,简单来说就是,超时,所以就啪的一声断了,开始上解决步骤。

解决方案一

其实只要配置nginx.conf的对应localhost里面的这几个参数就好
  1. proxy_connect_timeout;
  2. proxy_read_timeout;
  3. proxy_send_timeout;

解决方案二

发心跳包,原理就是在有效地再读时间内进行通讯,重新刷新再读时间

备注:配置的位置为localhost,给出简略地址

 http {
	server {
		location / {
		    root   html;
	        index  index.html index.htm;
		    proxy_pass http://webscoket; 
		    proxy_http_version 1.1; 
	      	    proxy_connect_timeout 4s; #配置点1
		    proxy_read_timeout 60s; #配置点2,如果没效,可以考虑这个时间配置长一点
		    proxy_send_timeout 12s; #配置点3
		    proxy_set_header Upgrade $http_upgrade; #这是webSocket的配置,与此篇博客无关
		    proxy_set_header Connection "Upgrade"; #这是webSocket的配置,与此篇博客无关
		}
	}
}

关于配置2的解释

备注:这个是服务器对你等待最大的时间,也就是说,当你webSocket使用nginx转发的时候,用上面的配置2来说,如果60秒内没有通讯,依然是会断开的,所以,你可以按照你的需求来设定

举例: 比如说,我设置了10分钟,那么如果我10分钟内有通讯,或者10分钟内有做心跳的话,是可以保持连接不中断的,详细看个人需求 感谢评论区 @zigzagroad 的指正,希望可以帮到你们,如果有更好的方式,麻烦分享一下,谢谢

关于nginx相关配置的解释,可以看一下这个

地址:http://blog.csdn.net/liujiyong7/article/details/18228915

© 著作权归作者所有

共有 人打赏支持
jack__0023
粉丝 9
博文 11
码字总数 6000
作品 0
深圳
程序员
加载中

评论(9)

justqb
justqb
gfddgs
rocky_star
rocky_star
发心跳包就完了
jack__0023
jack__0023

引用来自“dy810810”的评论

心跳包才是维持websocke通道的解决办法,冒然设长各种timout时间,这种做法不合适。
你可以使用心跳包的,只要觉得合适就行,
归根结底也就是,在他再读的时间内有效的通信过就好
dy810810
dy810810
心跳包才是维持websocke通道的解决办法,冒然设长各种timout时间,这种做法不合适。
zigzagroad
zigzagroad

引用来自“jack-0023”的评论

引用来自“zigzagroad”的评论

引用来自“jack-0023”的评论

引用来自“zigzagroad”的评论

也就是 60秒之内 还要发一个类似于心跳包的东西来保持连接了
1、时间可以设置的,你可以查一下nginx的配置2代表什么意思,
2、你可以设置你觉得一定时间内不做出反应的时间,比如设置成1800s,30分钟,如果webSocket在30分钟内没有一次通讯,是否可以认为帮他踢出去?
3、而且如果在这个时间内有通讯,那还要心跳包做什么?你的假设是要看对应的场景来做的对吧,我这个是webSocket通讯。

我当然知道这个时间是可以设置的,从你的文章内容中很容易发现这一点。
我想表达的意思是 不管设置的是多长时间,在这个时间内(不管是不是心跳)仍然需要与服务器端至少通讯一次,否则还是会被Nginx断掉。
是的,看个人需求吧,可以考虑在一定影响范围内,针对你的需求进行设置。
不好意思,暂时我能想到的只有这个,如果有更好的方式,欢迎分享

机制就是这么设定的,估计应该跳脱不出这个框架,所以必然是要从业务中手动通讯一次了,如果长时间不通讯的话。
jack__0023
jack__0023

引用来自“zigzagroad”的评论

引用来自“jack-0023”的评论

引用来自“zigzagroad”的评论

也就是 60秒之内 还要发一个类似于心跳包的东西来保持连接了
1、时间可以设置的,你可以查一下nginx的配置2代表什么意思,
2、你可以设置你觉得一定时间内不做出反应的时间,比如设置成1800s,30分钟,如果webSocket在30分钟内没有一次通讯,是否可以认为帮他踢出去?
3、而且如果在这个时间内有通讯,那还要心跳包做什么?你的假设是要看对应的场景来做的对吧,我这个是webSocket通讯。

我当然知道这个时间是可以设置的,从你的文章内容中很容易发现这一点。
我想表达的意思是 不管设置的是多长时间,在这个时间内(不管是不是心跳)仍然需要与服务器端至少通讯一次,否则还是会被Nginx断掉。
是的,看个人需求吧,可以考虑在一定影响范围内,针对你的需求进行设置。
不好意思,暂时我能想到的只有这个,如果有更好的方式,欢迎分享
zigzagroad
zigzagroad

引用来自“jack-0023”的评论

引用来自“zigzagroad”的评论

也就是 60秒之内 还要发一个类似于心跳包的东西来保持连接了
1、时间可以设置的,你可以查一下nginx的配置2代表什么意思,
2、你可以设置你觉得一定时间内不做出反应的时间,比如设置成1800s,30分钟,如果webSocket在30分钟内没有一次通讯,是否可以认为帮他踢出去?
3、而且如果在这个时间内有通讯,那还要心跳包做什么?你的假设是要看对应的场景来做的对吧,我这个是webSocket通讯。

我当然知道这个时间是可以设置的,从你的文章内容中很容易发现这一点。
我想表达的意思是 不管设置的是多长时间,在这个时间内(不管是不是心跳)仍然需要与服务器端至少通讯一次,否则还是会被Nginx断掉。
jack__0023
jack__0023

引用来自“zigzagroad”的评论

也就是 60秒之内 还要发一个类似于心跳包的东西来保持连接了
1、时间可以设置的,你可以查一下nginx的配置2代表什么意思,
2、你可以设置你觉得一定时间内不做出反应的时间,比如设置成1800s,30分钟,如果webSocket在30分钟内没有一次通讯,是否可以认为帮他踢出去?
3、而且如果在这个时间内有通讯,那还要心跳包做什么?你的假设是要看对应的场景来做的对吧,我这个是webSocket通讯。
zigzagroad
zigzagroad
也就是 60秒之内 还要发一个类似于心跳包的东西来保持连接了
从HTML5 WebSocket到Socket.io

HTML5 WebSocket 作为新一代的web标准,HTML5为我们提供了很多有用的东西,比如canvas,本地存储(已经分离出去了),多媒体编程接口,当然还有我们的WebSocket。WebSocket是HTML5开始提供的...

Srtian ⋅ 05/11 ⋅ 0

JavaScript 工作原理之五-深入理解 WebSockets 和带有 SSE 机制的HTTP/2 以及正确的使用姿势(译)

原文请查阅这里,略有改动,本文采用知识共享署名 3.0 中国大陆许可协议共享,BY Troland。 本系列持续更新中,Github 地址请查阅这里。 这是 JavaScript 工作原理的第五章。 现在,我们将会...

tristan ⋅ 05/11 ⋅ 0

全双工通信的 WebSocket

一. WebSocket 是什么? WebSocket 是一种网络通信协议。在 2009 年诞生,于 2011 年被 IETF 定为标准 RFC 6455 通信标准。并由 RFC7936 补充规范。WebSocket API 也被 W3C 定为标准。 WebS...

一缕殇流化隐半边冰霜 ⋅ 05/22 ⋅ 0

从Chrome源码看WebSocket

WebSocket是为了解决双向通信的问题,因为一方面HTTP的设计是单向的,只能是一边发另一边收。而另一方面,HTTP等都是建立在TCP连接之上的,HTTP请求完就会把TCP给关了,而TCP连接本身就是一个...

人人网FED ⋅ 05/27 ⋅ 0

Dva 中使用 WebSocket

一、概述 Websocket 是 H5 自带的一个 API,随着越来越多的浏览器都自适应了 H5 的特性,许多浏览器也内置了 WebSocket API。也就是说 WebSocket 和 window、document 一样作为全局变量可以直...

dkvirus ⋅ 05/28 ⋅ 0

Socket/WebSocket应用及IM粘包 分包等

> Socket/WebSocket应用 WebSocket的frame?google的protobuf在IM中的使用? IM、金融、股价、视频会议等这样一些应用来说,所需要的不过是高实时、低延时。比较好的可选方案呢?比较流行的是...

shareus ⋅ 04/28 ⋅ 0

各类“服务器推”技术原理与实例(Polling/COMET/SSE/WebSocket)

前言 服务器推(Server Push)是一类特定技术的总称。一般情况,客户端与服务器的交互方式是:客户端发起请求,服务器收到请求返回响应结果,客户端接收响应结果进行处理。从上述的交互过程中...

AlienZHOU ⋅ 06/08 ⋅ 0

微信小程序WebSocket开发

微信小程序WebSocket开发 让我们来实现一个简单的微信小程序WebSocket。WebSocket是一种没有被规范化的网络协议,不过网络上又有文章说是2011年被国际化。不过不管怎么样它摆脱了Http的无状态...

王And木 ⋅ 05/31 ⋅ 0

HTML5 WebSocket JavaWeb 实现简单的聊天室功能

本实例使用websocket实现了即时聊天系统,websocket技术可以在网页中使用js技术完成与后台的通讯, 而后台tomcat集成了websocket功能, 只需要很少的代码就可以完成很强大的功能, 基于此聊天系...

智慧点点 ⋅ 04/23 ⋅ 0

Workerman如何在WebSocket响应中添加Header

最近在用 Workerman 学习 WebSocket 的时候,遇到了一个问题: 结果浏览器报了这个错: Error during WebSocket handshake: Sent non-empty ‘Sec-WebSocket-Protocol’ header but no resp...

supergao222 ⋅ 04/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

关于“幂等”操作

一个幂等(idempotent)操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同. 开发中, 我们经常考虑幂等操作的场景有“接口调用”、“MQ消费”、“自动任务”等 接口调用, 可能出现...

零二一七 ⋅ 15分钟前 ⋅ 0

Dubbo服务服务暴露之ProxyFactory Invoker

Dubbo服务暴露过程中有涉及到调用ProxyFactory 中方法获取Invoker对象的过程,现在我们来深究下源码,来看下这个过程是在做些什么,返回的Invoker 对象是什么,我们来看一下代码的切入点: ...

哲别0 ⋅ 29分钟前 ⋅ 0

GP两种连接方式性能测试

GP两种连接方式性能测试 Pivotal import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class GPQueryStrin......

仔仔1993 ⋅ 33分钟前 ⋅ 0

jsonrpc-4j代码解析

解析文件 AutoJsonRpcServiceImplExporter JsonServiceExporter AutoJsonRpcServiceImplExporter 路径:com.googlecode.jsonrpc4j.spring.AutoJsonRpcServiceImplExporter AutoJsonRpcServi......

郭恩洲_OSC博客 ⋅ 55分钟前 ⋅ 0

百度搜索

from selenium import webdriver import time brower=webdriver.Firefox() brower.get('http://www.baidu.com') input=brower.find_element_by_id('kw') input.send_keys('中南大学') time.s......

南桥北木 ⋅ 今天 ⋅ 0

tomcat 日志记录器

1、日志记录器是记录消息的组件 日志记录器需要与某个servlet 容器相关联 2、Logger 接口 共定义了5种日志级别:FATAL、ERROR、WARNING、INFORMATION、DEBUGGER setVerbosity 设置级别 setC...

职业搬砖20年 ⋅ 今天 ⋅ 0

Thrift RPC实战(三) Thrift序列化机制

1.Thrift基础架构 Thrift是一个客户端和服务端的架构体系,数据通过socket传输; 具有自己内部定义的传输协议规范(TProtocol)和传输数据标准(TTransports); 通过IDL脚本对传输数据的数据结构...

lemonLove ⋅ 今天 ⋅ 0

网站建设就要像2018世界杯的俄罗斯队大杀四方[图]

今天心情不错,因为昨天晚上观看了世界杯比赛,尤其是对俄罗斯队的大杀四方感到十分霸气侧漏啊,因此我联想到了自己的博客网站,我的博客是去年年底上线的,一直想建设一个关于读书和读后感作...

原创小博客 ⋅ 今天 ⋅ 0

linux 信号机制

signal(SIGPIPE, SIG_IGN); TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包. 按照TCP协...

xxdd ⋅ 今天 ⋅ 0

my.cnf, my-small.cnf, my-medium.cnf, my-large.cnf

1. my-small.cnf # Example MySQL config file for small systems.## This is for a system with little memory (<= 64M) where MySQL is only used# from time to time and it's importa......

周云台 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部