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

2022-01-25 10:47:57 +08:00
 sunny1688

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

2988 次点击
所在节点    程序员
22 条回复
aladdinding
2022-01-25 11:22:54 +08:00
star 为敬
sunny1688
2022-01-25 11:23:47 +08:00
@aladdinding 感谢感谢
GGGG430
2022-01-25 11:26:23 +08:00
写的不错, 真是新手吗
beidounanxizi
2022-01-25 11:34:17 +08:00
没看到解决什么问题呀
skiy
2022-01-25 11:49:55 +08:00
之前用 GO 原生写的一个 TCP 服务,iot 那边测电压,总是很大,耗电。用 php rust 就很稳定。不知道是什么原因。
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
2022-01-25 12:36:30 +08:00
@skiy 应该是你们自己代码问题,不熟悉 go 的人如果不小心来个 for { select default } 之类的,就可能 cpu 100%了,具体问题得按你们自己的代码具体分析
leonme
2022-01-25 12:47:22 +08:00
解决什么问题呢?
lux182
2022-01-25 13:17:47 +08:00
重写是最好的学习,知道和创造是两个概念
sunny1688
2022-01-25 13:41:54 +08:00
@lesismal 感谢
windows 如果是用 goland 的话,可以设置一下编译平台,这样就有代码提示了,示例: https://s4.ax1x.com/2022/01/25/7HSX0P.png
skiy
2022-01-25 13:49:17 +08:00
@lesismal 我原本也认为是我代码问题,但是我照着好些别人的框架和 demo 来,一样的问题。我都怀疑是不是还要配置些什么东西和编译时加些什么参数了。

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

有兴趣的话可以参考下我的库:
github.com/lesismal/nbio
github.com/lesismal/arpc
sunny1688
2022-01-25 14:22:13 +08:00
@lesismal 大佬,已 star
lesismal
2022-01-25 14:29:44 +08:00
@skiy 这个 demo 体现不出来啥,你实测时候的连接数、载荷、qps 、日志量,都影响,go 版本代码跟你的其他语言代码功能差别,这些都只有你自己能够来定位,需要定位的话可以自己开个 pprof 看下哪里消耗多了
lesismal
2022-01-25 14:31:48 +08:00
@sunny1688 tks, welcome issue/pr
sunny1688
2022-01-25 14:49:33 +08:00
@qq1340691923 感谢
skiy
2022-01-25 18:15:50 +08:00
@lesismal 这个代码有没有问题?用不到什么 qps ,就测试一台设备连接而已。没有其它任何东西。
catinsides
2022-01-25 21:53:26 +08:00
golang 新手借问一下,我按照示例中的代码试了下不能跑通。
发现是 go get 的代码中不包含 server.WithHooks 这个函数,但是 github 中代码是 8 小时之前更新的。
说明 pkg.go.dev 到现在都没有更新代码?
sunny1688
2022-01-26 09:13:58 +08:00
@catinsides 抱歉,麻烦在拉取一下,是因为我没有发布新的 release

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/830426

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX