问题一:
表现:现在服务器在有连接进来时,每个连接至少有两个协程。一个是connection.StartReader() 用来读数据,另一个是从 server.go ListenTcpConn函数里,开了一个协程来调用 StartConn(), StartConn 又调用了connection.go 的 Start(), 在 connection 的 Start里。会打开连接的读协程。这时这个协程并不会退出,而是一直等连接关闭,然后去做清理的工作。
connction 默认并不会开启Write协程,只有在每一次调用 SendBuffMsg/SendToQueue 时。才会开始写协程
现在的问题时。我在做压测时。10000连接,每个连接1000个请求与回复,如果服务器用 SendMsg,那一切正常。但如果我用 SendBuffMsg时。会发现QPS下降明显,而且经常会出现有几个连接不关闭,僵死。而且从服务器的协程数来看,用SendMsg 时,一个连接有两个协程,也是我前面提到的那两个。如果用SendBuffMsg时。一个连接就有3个协程。在我上面的说明里看,这也是正常。
想做的修改:
- 因为server.go StartConn 的协程在开启connection 读协程以后,就一直等在那里等收尾工作,有点浪费。现在想去掉这个,开始读协程以后就直接退出。然后收尾工作由 connction 自己处理。想用 RunOnce的方式,直接在 Read协程里处理或用延时协程处理。
- connection的写协程,现在有问题,不知道是不是和写超时有关,僵死的连接不知道是什么原因
测试代码在: https://github.com/redfox1999/znix_demo
问题一:
表现:现在服务器在有连接进来时,每个连接至少有两个协程。一个是connection.StartReader() 用来读数据,另一个是从 server.go ListenTcpConn函数里,开了一个协程来调用 StartConn(), StartConn 又调用了connection.go 的 Start(), 在 connection 的 Start里。会打开连接的读协程。这时这个协程并不会退出,而是一直等连接关闭,然后去做清理的工作。
connction 默认并不会开启Write协程,只有在每一次调用 SendBuffMsg/SendToQueue 时。才会开始写协程
现在的问题时。我在做压测时。10000连接,每个连接1000个请求与回复,如果服务器用 SendMsg,那一切正常。但如果我用 SendBuffMsg时。会发现QPS下降明显,而且经常会出现有几个连接不关闭,僵死。而且从服务器的协程数来看,用SendMsg 时,一个连接有两个协程,也是我前面提到的那两个。如果用SendBuffMsg时。一个连接就有3个协程。在我上面的说明里看,这也是正常。
想做的修改:
测试代码在: https://github.com/redfox1999/znix_demo