框架代码:
希望给个星星支持一下 microSocket。
服务端逻辑:
package main
import (
"fmt"
"log"
msf "jd-test/microSocket"
"strconv"
)
var ser = msf.NewMsf()
//框架逻辑
//---------------------------------------------------------------------
type Test struct {
}
func (this Test) Default() {
fmt.Println("is default")
}
func (this Test)BeforeRequest(data map[string]string)bool{
log.Println("before")
return true
}
func (this Test)AfterRequest(data map[string]string){
log.Println("after")
}
func (this Test) Hello(data map[string]string){
fd, _ := strconv.Atoi(data["fd"])
log.Println("收到消息了")
ser.SessionMaster.WriteByid(uint32(fd), "Hello")
}
//---------------------------------------------------------------------
func main() {
log.SetFlags(log.Lshortfile | log.LstdFlags | log.Llongfile)
ser.EventPool.Register("test", &Test{})
ser.Listening(":8565")
}
客户端逻辑:
package main
import (
"fmt"
"jd-test/microSocket"
"jd-test/microSocket/util"
"net"
)
func main() {
conn, err := net.Dial("tcp", "127.0.0.1:8565")
if err != nil{
return
}
defer conn.Close()
data := make(map[string]string)
data["module"] = "test"
data["action"] = "Hello"
data["name"] = "jd"
//把map转化为string
a := []byte(util.Map2String(data))
//把string打包
b := microSocket.Enpack(a)
//发送数据
conn.Write(b)
res := make([]byte, 20)
conn.Read(res)
fmt.Println(res)
}
结论:
- 服务端只需要创建一个模块类实现相应的逻辑方法,然后再调用相应的方法注册一下,就可以实现一个很简单socket服务器
- 客户端也只需要连接,创建一个map,里面写明模块名,和接口名,最好打成一个包即可。