大佬教程收集整理的这篇文章主要介绍了没事随便写个小东西,虽然不知道想做啥,先留着,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
package main import ( "bufio" "encoding/json" "fmt" "net" "Strings" "sync" "time" ) func smain() { con,err := net.Dial("tcp","127.0.0.1:1789") if err != nil { fmt.Println(err) return } var x Msg = Msg{Action: "script",Address: "http://127.0.0.1"} b,_:=json.Marshal(X) con.Write(b) fmt.Fprint(con,"\r\n") buf := make([]byte,100) n,_ := con.Read(buf) json.Unmarshal(buf[:n],&X) fmt.Println(X) fmt.Println(String(buf[:n])) } func main() { lis,err := net.Listen("tcp","0.0.0.0:1789") if err != nil { fmt.Println(err) return } defer lis.Close() for { con,err := lis.Accept() if err != nil { fmt.Println(err) conTinue } go Hander(con) } } type Msg struct { Action String `json:action` Address String `json:address` JobID int64 `json:jobid` REMARK String `json:REMARK` } var empty []byte func Hander(con net.Conn) { defer con.Close() ip := Strings.Split(con.RemoteAddr().String(),":")[0] if !statusmap.Add(ip) { fmt.Fprint(con,"Already exist\r\n") return } buf := getBufPool(con) defer putBufPool(buf) for { line,_,err := buf.ReadLine() if err != nil { break } msg,err := decode(linE) if err != nil { fmt.Fprint(con,"UnkNow type\r\n") putJsonPool(msg) conTinue } if b,err := handlerMsg(msg); err != nil { fmt.Fprint(con,"Can't execute this job.") putJsonPool(msg) conTinue } else { con.Write(b) } putJsonPool(msg) } } func handlerMsg(msg *Msg) ([]byte,error) { msg.JobID = NewID() b,err := encode(msg) if err != nil { return empty,err } //执行对应操作 return b,nil } func handmsg(b []byte,ip String) { switch String(b) { case "Test.Ping": statusmap[ip] = getNow() } } type statusM map[String]int64 var statusmap statusM = make(statusM) func (statusM) Flush(ip String) { statusmap[ip] = getNow() } func (statusM) Del(ip String) { delete(statusmap,ip) } func (statusM) Add(ip String) bool { _,ok := statusmap[ip] if ok { return false } statusmap.Flush(ip) return true } var Pool sync.Pool func getBufPool(con net.Conn) *bufio.Reader { buf := Pool.Get() b,ok := buf.(*bufio.Reader) if ok { b.Reset(con) return b } return bufio.NewReader(con) } func putBufPool(b *bufio.Reader) { b.Reset(nil) Pool.Put(b) } var GlobalLock sync.Mutex func NewID() int64 { GlobalLock.Lock() defer GlobalLock.Unlock() time.Sleep(1e9) return getNow() } func getNow() int64 { return time.Now().Unix() } func decode(b []bytE) (*Msg,error) { fmt.Print(String(b)) j := getJsonPool() err := json.Unmarshal(b,j) if err != nil { return nil,err } return j,nil } func encode(msg *Msg) ([]byte,error) { return json.Marshal(*msg) } var JsonPool sync.Pool func getJsonPool() *Msg { buf := Pool.Get() b,ok := buf.(*Msg) if ok { return b } return new(Msg) } func putJsonPool(m *Msg) { m = nil Pool.Put(m) }
以上是大佬教程为你收集整理的没事随便写个小东西,虽然不知道想做啥,先留着全部内容,希望文章能够帮你解决没事随便写个小东西,虽然不知道想做啥,先留着所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。