精华内容
下载资源
问答
  • 下面小编就为大家带来一篇完美解决spring websocket自动断开连接再创建引发的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • NGINX 反向代理 VSCode Server 出现错误 :Websocket 自动关闭(code:1006) 实际上是Nginx 缺少 WebSocket 代理的原因 vscode.conf 完整配置如下: upstream vscode { server 127.0.0.1:9000; #VSCode Server ...

    NGINX 反向代理 VSCode Server 出现错误 :Websocket 自动关闭(code:1006)

    实际上是Nginx 缺少 WebSocket 代理的原因

     

    解决方案 : HTTP的Upgrade协议头机制用于将连接从HTTP连接升级到WebSocket连接,Upgrade机制使用了Upgrade协议头和Connection协议头

    示例 vscode.conf 完整配置如下:

    upstream vscode  {
        server 127.0.0.1:9000; #VSCode Server
    }
    
    #VSCode Server Err:1006 解决方案: https://www.cnblogs.com/qianxunman/p/13656874.html
    #Nginx WebDSocket 代理 : https://blog.csdn.net/chszs/article/details/26369257
    map $http_upgrade $connection_upgrade {  
        default upgrade;  
        '' close;  
    }
    
    # another virtual host using mix of IP-, name-, and port-based configuration
    server {
        listen       19000;
    
        location / {
            proxy_pass  http://vscode;
            #proxy_pass http://192.168.1.154:8080;
    
            #Proxy Settings https://www.cnblogs.com/wangzhisdu/p/7771069.html
            #Timeout Setting https://www.cnblogs.com/lianhaifeng/p/13525844.html
            proxy_http_version 1.1;  
            proxy_redirect     off;
            proxy_set_header   Host             $host;
            proxy_set_header   X-Real-IP        $remote_addr;
            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header   Upgrade          $http_upgrade;  
            proxy_set_header   Connection       "Upgrade"; 
            proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
            proxy_max_temp_file_size   0;
            proxy_connect_timeout      60;     #nginx与upstream server的连接超时时间(单位:s)
            proxy_send_timeout         90;     #nginx发送数据至 upstream server超时, 默认60s, 如果连续的60s内没有发送1个字节, 连接关闭
            proxy_read_timeout         90;    #nginx接收 upstream server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭
            proxy_buffer_size          4k;       #代理请求缓存区_这个缓存区间会保存用户的头信息以供Nginx进行规则处理_一般只要能保存下头信息即可 
            proxy_buffers              4 32k;    #同上 告诉Nginx保存单个用的几个Buffer最大用多大空间
            proxy_busy_buffers_size    64k;      #如果系统很忙的时候可以申请更大的proxy_buffers 官方推荐*2
            proxy_temp_file_write_size 64k;   #proxy缓存临时文件的大小
            #proxy_temp_path  /usr/local/nginx/temp; #用于指定本地目录来缓冲较大的代理请求
        }
    
        location ~.*\.(js|css|html|png|jpg)$ {
            expires    3d;
        }
    }

     

    展开全文
  • websocket自动关闭,code:1006

    万次阅读 2017-03-17 16:34:48
    问题:websocket自动关闭,报错代码1006, 原因:nginx有超时设置 解决:增加nginx的超时时间

    问题:websocket自动关闭,报错代码1006,

    解决:增加nginx的proxy_read_timeout

    展开全文
  • webSocket如何解决自动关闭的意思

    万次阅读 2018-06-30 10:37:01
    我的前一篇文章“webSocket如何在自己的工程中使用?...本文主要是解决webSocket自动关闭。websocket它有一个“心跳”机制,但这个心跳机制是要程序自己去写代码实现的,websocket本身没有给你做这个...

    我的前一篇文章“webSocket如何在自己的工程中使用?

    地址:https://blog.csdn.net/jintingbo/article/details/80755636

    讲述了webSocket的初级使用,初学者可以先看看那篇文章。

    本文主要是解决webSocket自动关闭。

    websocket它有一个“心跳”机制,但这个心跳机制是要程序自己去写代码实现的,websocket本身没有给你做这个东西。

    它是如何自动关闭的呢?当电脑浏览器发送pong帧的时候,由于内容为空,于是服务器将空内容转发回去,导致客户端浏览器以为是错误的帧类型,发送关闭信息进行error关闭。(服务器返回时,必须要把它原来发来的东西发回去的,这是TCP/IP协议的要求)。

    即然服务器接收到浏览器发送的"pong"后如果回复一个“pong”时,它会结束连接,那么为了避免这种事发生,可以在服务器接收到一个“pong”空信息时,不回复它的"pong",也就不关闭连接了。这是一种解决方案。

    另一种解决方案是:当发生关闭时,可以主动发送心跳给对方,让连接复活,这样就相当于不断线了。本文就是用这个方案实现的。

    第一步:在html文件中加入:
    -----------------------------

    <script type="text/javascript">
    var ws;
    //避免重复连接
    var lockReconnect = false;
    var wsUrl = "ws://localhost:8080/cl-market-camera-web/websocket";
    createWebSocket(wsUrl);
    function createWebSocket(url) {
    try {
    ws = new WebSocket(url);
    initEventHandle();
    } catch (e) {
                            //重新连接
    reconnect(url);
    }
    }
            //封装websocket的那几个接口函数
    function initEventHandle() {
    ws.onclose = function () {
    console.info("连接关闭");
    reconnect(wsUrl);
    };
    ws.onerror = function () {
    console.info("传输异常");
    reconnect(wsUrl);
    };
    ws.onopen = function () {
    //心跳检测重置
    heartCheck.reset().start();
    };

    websocket.onmessage = function(event) {
                        //console.info(event.data);

                        setMessageInnerHTML(event.data);
                        //如果获取到消息,心跳检测重置
                        heartCheck.reset().start();
    }
    }
    function reconnect(url) {
    if(lockReconnect) return;
    lockReconnect = true;
    //没连接上会一直重连,设置延迟避免请求过多
    setTimeout(function () {
        console.info("尝试重连..." + new Date().format("yyyy-MM-dd hh:mm:ss"));
        createWebSocket(url);
        lockReconnect = false;
    }, 5000);
    }
    //心跳检测,每5s心跳一次
    var heartCheck = {
    timeout: 5000,
    timeoutObj: null,
    serverTimeoutObj: null,
    reset: function(){
        clearTimeout(this.timeoutObj);
        clearTimeout(this.serverTimeoutObj);
        return this;
            },
    start: function(){
        var self = this;
        this.timeoutObj = setTimeout(function(){
            //这里发送一个心跳,后端收到后,返回一个心跳消息,
            //onmessage拿到返回的心跳就说明连接正常
            ws.send("HeartBeat" + new Date().format("yyyy-MM-dd hh:mm:ss"));
                    console.info("客户端发送心跳:" + new Date().format("yyyy-MM-dd hh:mm:ss"));

                    self.serverTimeoutObj = setTimeout(function(){
                                //如果超过一定时间还没重置,说明后端主动断开了

                                ws.close();
                                //如果onclose会执行reconnect,我们执行ws.close()就行了.
                                //如果直接执行reconnect 会触发onclose导致重连两次
                            }, self.timeout)
                        }, this.timeout)
                    }
    }
    //js中格式化日期,调用的时候直接:new Date().format("yyyy-MM-dd hh:mm:ss")
    Date.prototype.format = function(fmt) {
    var o = {
        "M+" : this.getMonth()+1,                 //月份 
        "d+" : this.getDate(),                    //日 
        "h+" : this.getHours(),                   //小时 
        "m+" : this.getMinutes(),                 //分 
        "s+" : this.getSeconds(),                 //秒 
        "q+" : Math.floor((this.getMonth()+3)/3), //季度
        "S"  : this.getMilliseconds()             //毫秒 
            }; 
            if(/(y+)/.test(fmt)) {

        fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length)); 

                    }

            for(var k in o) {
        if(new RegExp("("+ k +")").test(fmt)){
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
                }
                    }
            return fmt; 
            }
    function setMessageInnerHTML(innerHTML) {
    document.getElementById('message').innerHTML += innerHTML + '<br/>';
    }
    </script>

    第二步:在java的controller包中写一个WebSocketTest类
    ------------------------------
    package com.clmarket.controller;
    import javax.websocket.*;
    import javax.websocket.server.ServerEndpoint;
    import java.io.IOException;
    import java.util.concurrent.CopyOnWriteArraySet;

    @ServerEndpoint("/websocket")
    public class WebSocketTest {
            //设置连接数
    private static int onlineCount = 0;
    private static CopyOnWriteArraySet<WebSocketTest> webSocketSet = 
    new CopyOnWriteArraySet<WebSocketTest>();
    private Session session;
    public Session getSession(){
    return this.session;
    }
    @OnOpen
    public void onOpen(Session session){
    this.session = session;
    webSocketSet.add(this);     //加入set中
    addOnlineCount();           //在线数加1
    System.out.println("有新连接加入!当前在线人数为" + getOnlineCount());
    }
    @OnClose
    public void onClose(){
    webSocketSet.remove(this);  //从set中删除
    subOnlineCount();           //在线数减1
    System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount());
    }
    /**
    * 服务器向浏览器发送消息
    * @param message 需要推送到浏览器的消息
    * @param session 可选的参数
    */
    @OnMessage
    public void onMessage(String message, Session session) {
    for(WebSocketTest item: webSocketSet){
    try {
    item.sendMessage(message);
    } catch (IOException e) {
    e.printStackTrace();
    continue;
    }
    }
    }

    /**
    * 发生错误时调用
    * @param session
    * @param error
    */
    @OnError
    public void onError(Session session, Throwable error){
    System.out.println("发生错误");
    error.printStackTrace();
    }
    /**
    * 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。
    * @param message
    * @throws IOException
    */
    public void sendMessage(String message) throws IOException{
    this.session.getBasicRemote().sendText(message);
    //this.session.getAsyncRemote().sendText(message);
    }
    public static synchronized int getOnlineCount() {
    return onlineCount;
    }

    public static synchronized void addOnlineCount() {
    WebSocketTest.onlineCount++;
    }

    public static synchronized void subOnlineCount() {
    WebSocketTest.onlineCount--;
    }

    }

    第三步:如何把自己的信息借助上面的WebSocketTest类推送出去
    -----------------------------

    比如服务器有一个字符串“鄂H AAAAA8”这样的字符串,要把它推到浏览器里显示出来,

    其实只要三句话搞定:


    String license=“鄂H AAAAA8”;

    //new一个WebSocketTest对象,表示我要用它来发送
    WebSocketTest wst=new WebSocketTest();
    //这个session实际上是import javax.websocket.Session;
    Session session=wst.getSession();
    //调用这个webSocketTest对象的onMessage就可以把license发送出去了。
    wst.onMessage(license, session);

    全文完:湖北荆门金庭波 QQ:14280784 

    展开全文
  • webSocket自动重新连接

    万次阅读 2018-03-20 13:43:59
    转发:点击打开链接ReconnectingWebSocket一个小型JavaScript库,用于装饰WebSocket API以提供WebSocket连接,如果连接断开,它将自动重新连接。它是API兼容的,所以当你有:var ws = new WebSocket(' ws:// .... ...

    转发:点击打开链接

    ReconnectingWebSocket

    一个小型JavaScript库,用于装饰WebSocket API以提供WebSocket连接,如果连接断开,它将自动重新连接。

    它是API兼容的,所以当你有:

    var ws =  new  WebSocket' ws:// .... ');

    你可以用下面的代替:

    var ws =  new  ReconnectingWebSocket' ws:// .... ');

    gzip压缩的缩小库不足600字节。

    如何重新连接

    使用标准WebSocketAPI,您从WebSocket实例收到的事件通常是:

    onopen
    onmessage
    onmessage
    onmessage
    onclose // At this point the WebSocket instance is dead.
    

    使用a ReconnectingWebSocket,在一个onclose事件被调用后,它会自动尝试重新连接。另外,连接会重复尝试(只需一个小暂停),直到成功为止。所以你收到的事件可能看起来更像是:

    onopen
    onmessage
    onmessage
    onmessage
    onclose
    // ReconnectingWebSocket attempts to reconnect
    onopen
    onmessage
    onmessage
    onmessage
    onclose
    // ReconnectingWebSocket attempts to reconnect
    onopen
    onmessage
    onmessage
    onmessage
    onclose
    

    这一切都由图书馆自动处理。

    参数

    var socket =  new  ReconnectingWebSocket(url,protocols,options);

    url

    protocols

    options

    • 选项(见下文)

    选项

    选项可以在实例化时作为第三个参数传递,或者在实例化后直接在对象上设置:

    var socket =  new  ReconnectingWebSocket(url,null,{debug  true,reconnectInterval  3000 });

    要么

    var socket =  new  ReconnectingWebSocket(url);
    套接字debug  =  true ;
    套接字timeoutInterval  =  5400 ;

    debug

    • 这个实例是否应该记录调试消息。调试消息被打印到console.debug()
    • 接受truefalse
    • 默认值: false

    automaticOpen

    • 实例化时,WebSocket是否应尝试立即连接。可以使用ws.open()和ws.close()随时手动打开或关闭套接字。
    • 接受truefalse
    • 默认值: true

    reconnectInterval

    • 尝试重新连接之前要延迟的毫秒数。
    • 接受 integer
    • 默认: 1000

    maxReconnectInterval

    • 延迟重新连接尝试的最大毫秒数。
    • 接受 integer
    • 默认: 30000

    ####reconnectDecay

    • 重新连接延迟的增加率。允许重新连接尝试在问题持续时退后。
    • 接受integerfloat
    • 默认: 1.5

    timeoutInterval

    • 在关闭和重试之前等待连接成功的最长时间(以毫秒为单位)。
    • 接受 integer
    • 默认: 2000

    maxReconnectAttempts

    • 放弃之前将进行的重新连接尝试的最大次数。如果为空,重新连接尝试将继续进行。
    • 接受integernull
    • 默认: null

    binaryType

    • 二进制类型是一些应用程序所必需的。
    • 接受字符串'blob''arraybuffer'
    • 默认: 'blob'

    方法

    ws.open()

    • 打开重新连接WebSocket

    ws.close(code, reason)

    ws.refresh()

    • 如果仍然打开,请刷新连接(关闭然后重新打开它)。

    ws.send(data)

    • 通过WebSocket连接将数据传输到服务器。
    • 接受@param数据的文本字符串,ArrayBuffer或Blob

    喜欢这个?查看websocketd,以获取使用任何编程语言创建WebSocket后端的最简单方法。

    按照@joewalnes

    Bitdeli徽章


    展开全文
  • spring websocket自动断开连接再创建引发的问题解决方案
  • websocket自动断开连接问题

    万次阅读 多人点赞 2016-09-23 13:28:58
    问题:每过5分钟左右,websocket就会自动关闭 原因:使用了nginx服务,nginx配置: proxy_read_timeout(Default: 60s;),如果一直没有数据传输,连接会在过了这个时间之后自动关闭 ...Defines
  • 1.maven依赖 <dependency> <groupId>org.springframework....spring-boot-starter-websocket</artifactId> </dependency> <dependency> <groupId>org.projectlombok&...
  • /usr/local/nginx/conf/目录下,通过ps -ef | grep nginx进行把进程关闭 然后进入源文件夹下 /usr/local/nginx-1.17.9/ 执行 ./configure --prefix=/usr/local/nginx --with-...
  • webSocket自动重连

    千次阅读 热门讨论 2019-05-27 10:53:27
    一个小的JavaScript库,它装饰WebSocket API以提供WebSocket连接,如果连接断开,它将自动重新连接。 1.安装 我安装时因为当前项目里一些包没有升级,导致无法直接自动安装,故用了 url 安装 npm install ...
  • webSocket在spring的环境中是通过aop增强,是一个多例的bean。 主动调用关闭方法,实际是由代理类调用我们自己原先的onClose()方法,如果程序报错,关注自己的onClose方法即可。
  • window.webSocket = {}; var heartCheck = { lockReconnect: false, //避免ws重复连接 maxReconnectionDelay: 30 * AP.MINUTE, //最大重连时间 minReconnectionDelay: 10 * AP.SECOND, //最小重连时间 ...
  • WebSocket发送消息后自动断开的问题

    万次阅读 2016-09-12 11:21:05
    websocket与C++后端握手成功,server端能正常解析出client发来的数据,但是组包之后发回给client,client立刻断开websocket。 我之前使用flashAIR写的server端并没有遇到这个问题,而改用C++后就会出现。 Chrome...
  • websocket自动断开连接

    万次阅读 2017-12-25 10:42:39
    websocket自动断开连接解决办法
  • 记一次websocket自动断开连接

    千次阅读 2019-03-14 01:29:46
    websocket与后台连接用着用着就自动断开了: 原因分析: 1.首先再websocket关闭回调中添加日志,观察输出日志 ws.onclose = function (e) { console.log('websocket 断开:' + e.code + ' ' + e.reason + ' ' +...
  • 微信小程序websocket成功连接后,默认1分钟自动断开,怎样保持一直连接状态。 解决方法: 在websocket连接关闭时,重复连接websocket。 wx.onSocketClose((result) => { console.log("websocket连接关闭") ...
  • Springboot+WebSocket 自动重连机制 1、WebSocket WebSocket 是一种在单个TCP连接上进行全双工通信的协议,通信协议可能更熟悉的是HTTP,因此,学习WebSocket可以-以- HTTP为参考点。 HTTP 协议的缺陷是通信只能由...
  • 项目要做一个后台消息...然后走@OnClose方法,将连接自动关闭.怀疑是nginx默认60秒断开连接的原因.于是本地搭建一个nginx,将proxy_read_timeout 设置为 5000s,结果并没什么用,经过检查,发现原nginx.conf文件中 的k...
  • websocket 服务使用 Nginx 反向代理后,发现会自动断开,查看日志如下 2021-04-30 10:34:02.404 ERROR 153322 --- [nio-8088-exec-7] com.yxc.imapi.core.WebSocketServer : 发生错误:null,Session ID: 1e java....
  • 由于web/app有时候会出现网络不稳定websocket自动断开连接导致消息推送不了的情况,所以查阅资料后发现了一个心跳机制,也就是客户端间隔一段时间就向服务器发送一条消息,如果服务器收到消息就回复一条信息过来,...
  • 开始断点,这个记录日志的位置不是我们的目标,我们的目标是为了找出引发关闭的代码在哪。debug的时候根据调用栈一层一层的往前找   慢慢找就能发现问题   这里发现有一个异常被捕获到了。查看这个...
  • <p>I tried using the <code>/x/websocket</code> library as well but when I tried to read from the socket I end up hanging and I dont get the '1011' error. <p>If I use this JavaScript code on my ...
  • Nginx代理webSocket时60s自动断开, 怎么保持长连接

    万次阅读 多人点赞 2018-04-14 17:49:46
    利用nginx代理websocket的时候,发现客户端和服务器握手成功后,如果在60s时间内没有数据交互,连接就会自动断开,如下图:为了保持长连接,可以采取来两种方式.1.nginx.conf 文件里location 中的proxy_read_time...
  • 1.pom中引入依赖 ...org.java-websocket</groupId> <artifactId>Java-WebSocket</artifactId> <version>1.3.4</version> </dependency> 2.测试代码 import org.apache.c
  • 笔记 项目结构 代码 @Slf4j @Component @ServerEndpoint("/echo/{sid}") ... * concurrent包的线程安全Set,用来存放每个客户端对应的WebSocketServer对象 */ private static CopyOnWrite...
  • 昨天代码调试时发现websocket会断掉,不知道什么原因。 然后在控制台console日志中加入时间点进行观察 wss://www.test.com/WS/login.ws/10000 2021-02-15 17:12:18:267 onopen=[object Event] 2021-02-15 17:13:18:...
  • 在使用okhttp3中websocket来传送文件时,发现个问题,传送小文件正常,但是传送大文件,几秒钟就断线了 。但是如果每次发送都加一个时间间隔,如1毫秒,则正常传送,没有掉线。通过看具体执行类RealWebSocket源码: ...
  • 工作当中所遇到的问题以及解决方式 ...websocket自动断开连接 解决方式: 前端加入心跳包机制 后端接收心跳包之后不进行任何消息的接收 直接附上代码: 注:此代码为提供思路代码 <scri...
  • 此库的核心特点是 除了手动关闭WebSocket(就是RxJava取消订阅),WebSocket在异常关闭的时候(onFailure,发生异常,如WebSocketException等等),会自动重连,永不断连.其次,对WebSocket做的缓存处理,同一个URL,共享一个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,525
精华内容 6,610
关键字:

websocket自动关闭了