使用 golang 实现的一个简单的 tcp 服务器,主要就是接收客户端连接然后做 rpc 转发 发现在 500 个连接开始就陆续出现 connection reset by peer,5000 个以上的时候甚至有 60%报错 服务端就启动在本地,由于没有头绪也不知道要给出什么参数 MacBook Pro (Retina, 13-inch, Early 2015) Golang 1.9 有高手指点迷津么
1
ChristopherWu 2017-10-17 20:05:49 +08:00
接收的服务器是怎么实现的? golang 的 rpc 有设置 req.Close 吗?
可能是服务器关闭了链接,但 golang 复用了之前的链接,所以提示 reset by peer |
2
MungBeanSoup OP @ChristopherWu
connection reset by peer 不是 rpc 调用的时候报的错,是我自己的 tcp 服务器 RST 了连接 |
3
sagaxu 2017-10-17 20:18:47 +08:00 via Android
Transport.MaxIdleConnsPerHost 设置了吗?
|
4
MungBeanSoup OP @sagaxu tcp 服务器该怎么设置这个配置
|
5
sagaxu 2017-10-18 10:07:22 +08:00
@MungBeanSoup 那要看你的连接池是怎么写的了
|
6
90928yao 2017-10-18 10:42:30 +08:00
请复用,你看下端口 应该都是 close_wait
|
7
MungBeanSoup OP @90928yao 请问 tcp 该如何复用连接
我搜索都是 http 复用的 tcp 连接 |
8
wcsjtu 2017-10-18 16:40:56 +08:00
@MungBeanSoup SO_REUSEADDR
|
10
reus 2017-10-19 10:16:59 +08:00
……没代码有什么好说的。
|
11
MungBeanSoup OP 最后设置服务器的 somaxconn 和 backlog 让连接能上 W 了,接下来看看有没有别的能优化的地方
|