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

2016-04-06 14:57:24 +08:00
 boydfd

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

6184 次点击
所在节点    程序员
9 条回复
crabRunning
2016-04-06 15:49:31 +08:00
少了个 e
peter999
2016-04-06 15:56:00 +08:00
换个库试试
boydfd
2016-04-06 16:38:11 +08:00
@crabRunning 发完的时候发现了,改不了= =

@peter999 用 go 写的,用的是 gorilla/websocket ,除了这个貌似就官方的包好用了
itfanr
2016-04-06 17:06:19 +08:00
少了个 e 看着不爽 哈哈
peter999
2016-04-06 17:09:29 +08:00
抓下异常信息
boydfd
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
2016-04-06 17:55:59 +08:00
lucky215
2016-04-09 01:01:14 +08:00
这个我之前写 PHP 的时候遇到过,当时是用分段传输的方式解决的
boydfd
2016-04-09 08:39:02 +08:00
@peter999
@lucky215

已经知道问题所在了,我使用的 gorilla 的库,一开始可以设置缓冲区大小,缓冲区满了后再向里面写数据就会断开连接。这么设计的原因应该是为了防止某些用户恶意的请求,导致服务器花费大量的缓冲区来保存要向这个恶意用户的数据。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/268975

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX