V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
jimy1
V2EX  ›  Go 编程语言

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

  •  
  •   jimy1 · 2017-10-19 10:15:44 +08:00 · 1617 次点击
    这是一个创建于 2381 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    8 条回复    2017-10-19 19:42:54 +08:00
    jameshuazhou
        1
    jameshuazhou  
       2017-10-19 10:26:03 +08:00
    golang 写 tcp 已经不能再简单了,别的框架好不到哪里去。
    找到问题原因来,而不是想着换个框架就能解决问题。
    例如,打开文件为何出错? redis 连接为何出错?
    就算出错,为何宕了?是程序问题,还是滥用了 panic?
    jimy1
        2
    jimy1  
    OP
       2017-10-19 10:30:41 +08:00
    谢谢 jameshuazhou 的回复
    lwldcr
        3
    lwldcr  
       2017-10-19 10:37:34 +08:00   ❤️ 1
    一秒 1 两百 基本上不存在压力吧
    处理好文件、redis 读写就行了
    可以初始化一个连接池,读写文件的时候如果可能有冲突记得加锁解锁
    打开文件出错 或者 redis 连接出错 都可以捕获错误并安全处理的 合理的处理不会导致整个程序挂掉
    jimy1
        4
    jimy1  
    OP
       2017-10-19 10:44:24 +08:00
    感谢 lwldcr 回复, 您的建议对我帮助很大
    cloudzhou
        5
    cloudzhou  
       2017-10-19 10:45:13 +08:00
    go 不是“显示异常”的错误处理方式,而是传统 C 语言 return error 的方式。
    所以简单的处理方法,就是不要忽略任何 error,并且合适的处理。
    你能写出容易 panic 的代码,任何框架都是枉然,顶多给你 defer 一下。
    认真,严谨的去 review 代码
    gamexg
        6
    gamexg  
       2017-10-19 10:53:31 +08:00
    处理连接的协程最外层捕获 panic,可以防止单个连接 panic 造成整个进程崩溃。
    但是虽然一般都有这个,但是实际可靠的代码根本不应该触发这个。
    reus
        7
    reus  
       2017-10-19 14:09:54 +08:00
    框架救不了低能者
    opengps
        8
    opengps  
       2017-10-19 19:42:54 +08:00
    压力到了就上负载均衡啊,没必要太费精力去追求过高的单机性能
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1001 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 19:46 · PVG 03:46 · LAX 12:46 · JFK 15:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.