V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
sunny1688
V2EX  ›  程序员

golang 新手开源一个 tcp 网络框架

  •  
  •   sunny1688 · 2022-01-25 10:47:57 +08:00 · 3006 次点击
    这是一个创建于 1070 天前的主题,其中的信息可能已经有所发展或是发生改变。

    基于事件循环,虚心接受大家的批评,渴望大家的 PR ,项目地址: https://github.com/ikilobyte/netman

    第 1 条附言  ·  2022-03-01 20:37:33 +08:00
    现已支持 TLS
    22 条回复    2022-08-01 09:14:06 +08:00
    aladdinding
        1
    aladdinding  
       2022-01-25 11:22:54 +08:00
    star 为敬
    sunny1688
        2
    sunny1688  
    OP
       2022-01-25 11:23:47 +08:00
    @aladdinding 感谢感谢
    GGGG430
        3
    GGGG430  
       2022-01-25 11:26:23 +08:00
    写的不错, 真是新手吗
    beidounanxizi
        4
    beidounanxizi  
       2022-01-25 11:34:17 +08:00   ❤️ 1
    没看到解决什么问题呀
    skiy
        5
    skiy  
       2022-01-25 11:49:55 +08:00 via iPhone
    之前用 GO 原生写的一个 TCP 服务,iot 那边测电压,总是很大,耗电。用 php rust 就很稳定。不知道是什么原因。
    lesismal
        6
    lesismal  
       2022-01-25 12:34:13 +08:00
    简单看了下,暂时看到几个问题,windows 下的没有 uni*的跳转,所以没仔细看、不一定准确,供楼主参考:
    1. fd 是非阻塞的,但读包解包用了 ReadFull 的逻辑,在本次只有半包数据时连接就被断开了,这是不应该作为生产服务来部署的
    2. conn 直接写,数据量大写失败应判断 err 类型,缓冲区满、中断之类的应该 AddWrite 等待可写再写
    3. server 处理 message 单协程,go 的指令不像 c/cpp 那么快,这种逻辑单协程性能可能会吃紧,如果说 handler 再自己加 pool 、异步之类的,则 server 这块的逻辑协程其实就不需要了
    lesismal
        7
    lesismal  
       2022-01-25 12:36:30 +08:00
    @skiy 应该是你们自己代码问题,不熟悉 go 的人如果不小心来个 for { select default } 之类的,就可能 cpu 100%了,具体问题得按你们自己的代码具体分析
    leonme
        8
    leonme  
       2022-01-25 12:47:22 +08:00 via iPhone
    解决什么问题呢?
    lux182
        9
    lux182  
       2022-01-25 13:17:47 +08:00
    重写是最好的学习,知道和创造是两个概念
    sunny1688
        10
    sunny1688  
    OP
       2022-01-25 13:41:54 +08:00
    @lesismal 感谢
    windows 如果是用 goland 的话,可以设置一下编译平台,这样就有代码提示了,示例: https://s4.ax1x.com/2022/01/25/7HSX0P.png
    skiy
        11
    skiy  
       2022-01-25 13:49:17 +08:00 via iPhone
    @lesismal 我原本也认为是我代码问题,但是我照着好些别人的框架和 demo 来,一样的问题。我都怀疑是不是还要配置些什么东西和编译时加些什么参数了。

    https://gitcode.net/skiy/serv_demo/-/blob/6698453b6f9d493ff6755cdfea32a1a5d2c93368/demo.go
    qq1340691923
        12
    qq1340691923  
       2022-01-25 13:52:16 +08:00
    star 了
    lesismal
        13
    lesismal  
       2022-01-25 14:09:02 +08:00
    @sunny1688 tks ,JB 家的产品我还一个都没用过

    有兴趣的话可以参考下我的库:
    github.com/lesismal/nbio
    github.com/lesismal/arpc
    sunny1688
        14
    sunny1688  
    OP
       2022-01-25 14:22:13 +08:00
    @lesismal 大佬,已 star
    lesismal
        15
    lesismal  
       2022-01-25 14:29:44 +08:00
    @skiy 这个 demo 体现不出来啥,你实测时候的连接数、载荷、qps 、日志量,都影响,go 版本代码跟你的其他语言代码功能差别,这些都只有你自己能够来定位,需要定位的话可以自己开个 pprof 看下哪里消耗多了
    lesismal
        16
    lesismal  
       2022-01-25 14:31:48 +08:00
    @sunny1688 tks, welcome issue/pr
    sunny1688
        17
    sunny1688  
    OP
       2022-01-25 14:49:33 +08:00
    @qq1340691923 感谢
    skiy
        18
    skiy  
       2022-01-25 18:15:50 +08:00 via iPhone
    @lesismal 这个代码有没有问题?用不到什么 qps ,就测试一台设备连接而已。没有其它任何东西。
    catinsides
        19
    catinsides  
       2022-01-25 21:53:26 +08:00
    golang 新手借问一下,我按照示例中的代码试了下不能跑通。
    发现是 go get 的代码中不包含 server.WithHooks 这个函数,但是 github 中代码是 8 小时之前更新的。
    说明 pkg.go.dev 到现在都没有更新代码?
    sunny1688
        20
    sunny1688  
    OP
       2022-01-26 09:13:58 +08:00
    @catinsides 抱歉,麻烦在拉取一下,是因为我没有发布新的 release
    CrazyCollin
        21
    CrazyCollin  
       2022-07-30 03:07:09 +08:00
    感谢 lz 开源,本新手菜鸟正按照 lz 的 commit 记录重新写,希望学习一下😁
    sunny1688
        22
    sunny1688  
    OP
       2022-08-01 09:14:06 +08:00
    @CrazyCollin 这是什么操作😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1114 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:42 · PVG 02:42 · LAX 10:42 · JFK 13:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.