[求推荐] Golang Go语言 大神推荐稳定的开源 TCP 服务端框架,生产环境访问量每秒一两百,自己写的一个连接协程挂了整个程序也 panic 了

如题,小弟需要一个 TCP 服务端接受和处理请求,请求内容是解析 redis 持久化文件和删除现有 Redis 内存库的记录,每秒访问量在几十到一两百,自己写的程序在新连接到来开了新协程后容错没处理好,例如新协程打开文件出错整个程序也宕了,例如新协程建立 redis 连接出错整个程序也宕了。

请各位帮忙推荐有没有现成的框架?先谢谢了


[求推荐] Golang Go语言 大神推荐稳定的开源 TCP 服务端框架,生产环境访问量每秒一两百,自己写的一个连接协程挂了整个程序也 panic 了
9 回复

golang 写 tcp 已经不能再简单了,别的框架好不到哪里去。
找到问题原因来,而不是想着换个框架就能解决问题。
例如,打开文件为何出错? redis 连接为何出错?
就算出错,为何宕了?是程序问题,还是滥用了 panic?

更多关于[求推荐] Golang Go语言 大神推荐稳定的开源 TCP 服务端框架,生产环境访问量每秒一两百,自己写的一个连接协程挂了整个程序也 panic 了的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


谢谢 jameshuazhou 的回复

一秒 1 两百 基本上不存在压力吧
处理好文件、redis 读写就行了
可以初始化一个连接池,读写文件的时候如果可能有冲突记得加锁解锁
打开文件出错 或者 redis 连接出错 都可以捕获错误并安全处理的 合理的处理不会导致整个程序挂掉

感谢 lwldcr 回复, 您的建议对我帮助很大

go 不是“显示异常”的错误处理方式,而是传统 C 语言 return error 的方式。
所以简单的处理方法,就是不要忽略任何 error,并且合适的处理。
你能写出容易 panic 的代码,任何框架都是枉然,顶多给你 defer 一下。
认真,严谨的去 review 代码

处理连接的协程最外层捕获 panic,可以防止单个连接 panic 造成整个进程崩溃。
但是虽然一般都有这个,但是实际可靠的代码根本不应该触发这个。

框架救不了低能者

压力到了就上负载均衡啊,没必要太费精力去追求过高的单机性能

针对您提出的关于Golang TCP服务端框架的需求,我推荐以下几个方向:

  1. Golang标准库:Golang自带的net标准库提供了基本的TCP服务器和客户端的实现,适用于简单的TCP网络应用。对于生产环境访问量每秒一两百的情况,标准库通常能够满足需求,并且稳定性较高。
  2. 轻量级TCP框架:如需要更多功能或更方便的扩展,可以选择一些轻量级的TCP框架。这些框架通常提供了服务器的基本实现和扩展接口,适合开发者根据自己的需求进行定制。
  3. 高性能网络框架:若考虑到未来访问量的增长,或者需要构建基于TCP协议的高性能网络服务(如RPC服务、游戏服务等),可以选择支持异步响应的高性能网络框架。例如goev,它实现了Reactor模型,支持异步响应,且对GC友好,适合高并发场景。

此外,针对您提到的协程挂掉导致整个程序panic的问题,建议检查并优化您的代码,确保在处理TCP连接时能够妥善处理错误,避免单个连接的异常导致整个程序崩溃。可以使用defer和recover机制来捕获并处理panic,防止程序异常退出。

回到顶部