GoLang
xiaowhy
这个作者很懒,什么都没留下…
展开
-
go 网络编程one connection one goroutine
看网上分析,go 的accept后台实际用的还是epoll,和自己使用epoll差别不大,甚至比epoll性能要好首先,client 连接 server 的时候,listener 通过 accept 调用接收新 connection,每一个新 connection 都启动一个 goroutine 处理,accept 调用会把该 connection 的 fd 连带所在的 goroutine 上下文信息封装注册到 epoll 的监听列表里去,当 goroutine 调用conn.Read或者con...原创 2021-06-25 14:20:27 · 162 阅读 · 0 评论 -
一个对网络库进行压测统计qps的小程序
一个对网络库进行压测统计qps的小程序参考:https://gist.github.com/Tsiannian/137b722f1b5dcebea0830a9e12720de0package mainimport ( "bufio" "encoding/binary" "fmt" "net" "os" "time")func timeStamp() uint64 { return uint64(time.Now().UnixNano())}func encode(in原创 2021-01-06 14:43:37 · 329 阅读 · 0 评论 -
支持高并发的基于epoll的go服务器模型
参照https://colobu.com/2019/02/23/1m-go-tcp-connection/,使用go编写,基于epoll io复用模型,基于工作池,防止无限制协程个数服务端:serverepoll.gopackage mainimport ( "flag" "github.com/libp2p/go-reuseport" "log" "net" "net/http" "github.com/rcrowley/go-metrics"原创 2020-11-17 14:19:17 · 572 阅读 · 0 评论 -
一个简单的go的Socket服务器工作池
一个简单的go的Socket服务器工作池处理收包和发包是工作池Server.gopackage mainimport ( "fmt" "net" "strconv" "time" "sync")type Task struct { conn *Session data []byte}type Result struct { conn *Session data []byte}var tasks = make(chan原创 2020-11-09 16:36:12 · 251 阅读 · 0 评论 -
go使用logrus同时输出屏幕和文件日志
func InitLog() { //设置输出样式,自带的只有两种样式logrus.JSONFormatter{}和logrus.TextFormatter{} log.SetFormatter(&log.TextFormatter{}) log.SetOutput(os.Stdout) //设置output,默认为stderr,可以为任何io.Writer,比如文件*os.File file, err := os.OpenFile("checkemstools.l.原创 2020-07-08 16:40:30 · 6546 阅读 · 0 评论 -
GoLang语言学习
这几天学习GoLang语言,写了个socket客户端例子,有几点不爽的地方函数左括号要和函数名在同一行结构体转换到byte有点麻烦很多语法感觉跟C++很像,却又有些地方不一样有些语法感觉比Python还复杂报错提示也不明显傻逼的是,没使用过的import包竟然还报错最大的好处大概是协程的应用吧...原创 2019-02-02 15:37:30 · 213 阅读 · 0 评论