已经解决🎉:stackoverflow.com/questions/7… 这个连接的方法不行!
解决办法是问chatgpt问出来的,之前也问了好几次,都没解决问题,可能问的方式不对
解决办法如下图
code
server
// https://github.com/dayueba/mrpc/blob/master/transport/server_transport.go
conn, err := tl.AcceptTCP()
i++
fmt.Println("conn count: ", i)
主要就是统计一下一共建立了多少条连接
client
var wg sync.WaitGroup
wg.Add(10000)
for i := 0; i < 10000; i++ {
go func() {
defer wg.Done()
rsp := &Response{}
err = c.Call(context.Background(), "helloworld.Greeter.Add", req, rsp, opts...)
if err != nil {
atomic.AddInt64(&fail, 1)
} else {
atomic.AddInt64(&success, 1)
}
}()
}
wg.Wait()
统计失败和成功次数
std_client
for i := 0; i < 10000; i++ {
go func() {
defer wg.Done()
conn, err := net.Dial("tcp", "127.0.0.1:8000")
if err != nil {
fmt.Println(err)
return
}
defer conn.Close()
}()
}
直接使用std_net建立连接
坑
server 和 client 都运行在mac环境下
直接调用std_net建立连接
我明明要建立10000条连接,实际只建立9条,虽然每次都不一样,但是不会超过20
运行client就更离谱了
基本都是失败
为什么说是坑?
- 同样的代码在linux环境下测试都没问题,不仅如此,只要不把server和client部署在同一台机器上就没问题
- linux client -> mac server;mac client -> linux server;linux client -> linux server 都没问题
- mac client -> mac server 就有问题
- 应该是代码的问题,我新写的一个框架就没这问题,这代码写的不好,我也不想改了
更新
使用tproxy监控
在mac环境下,发现并发情况下,最多建立100多条连接,如果是顺序请求,则可以建立全部连接。
在linux环境下,一切正常,所以怀疑和操作系统有关