V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
boydfd
V2EX  ›  程序员

websockt 传输大量数据的时候为什么会异常断开

  •  
  •   boydfd · 2016-04-06 14:57:24 +08:00 · 6144 次点击
    这是一个创建于 3145 天前的主题,其中的信息可能已经有所发展或是发生改变。

    服务器向客户端写大量数据的时候, websockt 连接会异常断开,这是为什么啊?

    9 条回复    2016-04-09 08:39:02 +08:00
    crabRunning
        1
    crabRunning  
       2016-04-06 15:49:31 +08:00 via Android
    少了个 e
    peter999
        2
    peter999  
       2016-04-06 15:56:00 +08:00
    换个库试试
    boydfd
        3
    boydfd  
    OP
       2016-04-06 16:38:11 +08:00
    @crabRunning 发完的时候发现了,改不了= =

    @peter999 用 go 写的,用的是 gorilla/websocket ,除了这个貌似就官方的包好用了
    itfanr
        4
    itfanr  
       2016-04-06 17:06:19 +08:00
    少了个 e 看着不爽 哈哈
    peter999
        5
    peter999  
       2016-04-06 17:09:29 +08:00
    抓下异常信息
    boydfd
        6
    boydfd  
    OP
       2016-04-06 17:42:09 +08:00
    @peter999 异常说的是 read tcp 172.16.71.73:8080->172.16.71.73:62581: use of closed network connection--------readMessageError
    抓包后发现先是 websocket 连接关闭(服务器请求关闭的),然后服务器发 tcp 的 fin 包给客户端
    peter999
        7
    peter999  
       2016-04-06 17:55:59 +08:00
    lucky215
        8
    lucky215  
       2016-04-09 01:01:14 +08:00 via iPhone
    这个我之前写 PHP 的时候遇到过,当时是用分段传输的方式解决的
    boydfd
        9
    boydfd  
    OP
       2016-04-09 08:39:02 +08:00   ❤️ 1
    @peter999
    @lucky215

    已经知道问题所在了,我使用的 gorilla 的库,一开始可以设置缓冲区大小,缓冲区满了后再向里面写数据就会断开连接。这么设计的原因应该是为了防止某些用户恶意的请求,导致服务器花费大量的缓冲区来保存要向这个恶意用户的数据。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2840 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 02:19 · PVG 10:19 · LAX 18:19 · JFK 21:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.