当前位置: 首页 > 面试题库 >

一分钟后,Gorilla WebSocket断开连接

荣德厚
2023-03-14
问题内容

我将Go(Golang)1.4.2和Gorilla WebSockets一起使用在nginx
1.4.6反向代理后面。打开页面大约一分钟后,我的WebSocket断开连接。在Chrome和Firefox上会发生相同的行为。

最初,我在使用WebSockets连接服务器和客户端时遇到问题。然后,我读到我需要调整我的nginx配置。这就是我所拥有的。

server {
    listen 80;
    server_name example.com;

    proxy_pass_header Server;

    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forward-Proto $scheme;

        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        proxy_pass http://127.0.0.1:1234;
    }
}

我的Go代码基本上是在回显客户的消息。(为简洁起见,省略了错误)。这是我的HandleFunc

var up = websocket.Upgrader{
    ReadBufferSize:  1024,
    WriteBufferSize: 1024,
}

ws, _ := up.Upgrade(resp, req, nil)
defer ws.Close()

var s struct {
    Foo string
    Bar string
}

for {
    ws.ReadJSON(&s)
    ws.WriteJSON(s)
}

JavaScript也非常简单。

var ws = new WebSocket("ws://example.com/ws/");
ws.addEventListener("message", function(evnt) {
    console.log(JSON.parse(evnt.data));
});

var s = {
    Foo: "hello",
    Bar: "world"
};
ws.send(JSON.stringify(s));

Go正在报告websocket: close 1006 unexpected EOF。我知道当我离开或刷新页面时会ReadJSON返回EOF,但这似乎是一个不同的错误。同样,打开页面大约一分钟后,意外的EOF也会自行发生。

我有一个onerrorJavaScript函数。该事件不会触发,而是onclose触发。


问题答案:

我有同样的问题,问题是nginx配置。默认情况下,其读取超时为1分钟proxy_pass

语法:proxy_read_timeout时间;

默认值:proxy_read_timeout 60s;

上下文:http,服务器,位置

参见http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_timeout

就我而言,我已将超时时间增加到10小时:

proxy_read_timeout 36000s;



 类似资料:
  • 我登录到IMAP服务器: 然后我使用IMAP IDLE在邮件到达时提取邮件。由于imap服务器连接在30分钟后自动断开,我每25分钟重新连接一次imap服务器。 所有这些工作正常,直到它持续超过48小时。当我这样做时,我得到以下错误imap.logout 错误消息: imap对象: #,raw\u data=“*OK Gimap ready for requests from 54.242.66.

  • 几分钟后,出现此错误。当我执行另一个查询时,它工作正常。 这是错误: 这是我的配置文件:

  • 我有一个不连通的二分无向图。我想把图完全断开。我能执行的唯一操作是删除一个节点。删除节点将自动删除其边。任务是最小化要删除的节点数。图中的每个节点最多有4条边。 通过完全断开一个图的连接,我的意思是不应该通过一个链接连接两个节点。基本上是一个空边集。

  • 断开mqtt连接,前提是必须已经通过Iot_id,Iot_pwd建立过一次mqtt连接。 请求方式: "|4|1|4|\r" 返回值: "|4|1|4|1|\r" 断开成功 "|4|1|4|2|\r" 断开失败 Arduino样例: softSerial.print("|4|1|4|\r");

  • 先查验了身份证,学生证 自我介绍 询问是否有论文、专利、软著,奖学金情况 Java八股:面向对象特点、String,StringBuilder,StringBuffer区别,StringBoot常见注解,依赖注入 两个SQL问题,一个插入,一个连表查询 Linux查看进程用什么命令,指定关键字筛选 实习收获 期望薪资 反问 #秋招# #中兴#

  • 一看是女面试官我大概就了解什么情况了,后续果然,一点技术不懂,纯纯是美团没人派个hr来技术面。 八股: 1.说说常见排序算法的时间复杂度 2.HTTP状态码; 3.在浏览器中输入 URL 地址到显示主页的过程? 4.进程线程区别 5.避免死锁的方法 6.用户态和内核态 7.Mysql Hash索引和B+树索引的区别 8.事务隔离级别 9.乐观锁和悲观锁及其适用场景 10.进程的状态及其状态之间的转