update gtcp exxamples

This commit is contained in:
John
2019-05-03 13:28:27 +08:00
parent c9537af062
commit 99dc69e839
10 changed files with 327 additions and 2 deletions

View File

@ -38,8 +38,8 @@ func View(name...string) *gview.View {
}
// Config returns an instance of config object with specified name.
func Config(file...string) *gcfg.Config {
return gins.Config(file...)
func Config(name...string) *gcfg.Config {
return gins.Config(name...)
}
// Database returns an instance of database ORM object with specified configuration group name.

View File

@ -0,0 +1,39 @@
package funcs
import (
"encoding/json"
"fmt"
"github.com/gogf/gf/g/net/gtcp"
"github.com/gogf/gf/geg/net/gtcp/pkg_operations/common/types"
)
// 自定义格式发送消息包
func SendPkg(conn *gtcp.Conn, act string, data...string) error {
s := ""
if len(data) > 0 {
s = data[0]
}
msg, err := json.Marshal(types.Msg{
Act : act,
Data : s,
})
if err != nil {
panic(err)
}
return conn.SendPkg(msg)
}
// 自定义格式接收消息包
func RecvPkg(conn *gtcp.Conn) (msg *types.Msg, err error) {
if data, err := conn.RecvPkg(); err != nil {
return nil, err
} else {
msg = &types.Msg{}
err = json.Unmarshal(data, msg)
if err != nil {
return nil, fmt.Errorf("invalid package structure: %s", err.Error())
}
return msg, err
}
}

View File

@ -0,0 +1,60 @@
package main
import (
"github.com/gogf/gf/g/net/gtcp"
"github.com/gogf/gf/g/os/glog"
"github.com/gogf/gf/g/os/gtimer"
"github.com/gogf/gf/geg/net/gtcp/pkg_operations/common/funcs"
"github.com/gogf/gf/geg/net/gtcp/pkg_operations/common/types"
"time"
)
func main() {
conn, err := gtcp.NewConn("127.0.0.1:8999")
if err != nil {
panic(err)
}
defer conn.Close()
// 心跳消息
gtimer.SetInterval(time.Second, func() {
if err := funcs.SendPkg(conn, "heartbeat"); err != nil {
panic(err)
}
})
// 测试消息, 3秒后向服务端发送hello消息
gtimer.SetTimeout(3*time.Second, func() {
if err := funcs.SendPkg(conn, "hello", "My name's John!"); err != nil {
panic(err)
}
})
for {
msg, err := funcs.RecvPkg(conn)
if err != nil {
if err.Error() == "EOF" {
glog.Println("server closed")
}
break
}
switch msg.Act {
case "hello": onServerHello(conn, msg)
case "doexit": onServerDoExit(conn, msg)
case "heartbeat": onServerHeartBeat(conn, msg)
default:
glog.Errorfln("invalid message: %v", msg)
break
}
}
}
func onServerHello(conn *gtcp.Conn, msg *types.Msg) {
glog.Printfln("hello response message from [%s]: %s", conn.RemoteAddr().String(), msg.Data)
}
func onServerHeartBeat(conn *gtcp.Conn, msg *types.Msg) {
glog.Printfln("heartbeat from [%s]", conn.RemoteAddr().String())
}
func onServerDoExit(conn *gtcp.Conn, msg *types.Msg) {
glog.Printfln("exit command from [%s]", conn.RemoteAddr().String())
conn.Close()
}

View File

@ -0,0 +1,45 @@
package main
import (
"github.com/gogf/gf/g/net/gtcp"
"github.com/gogf/gf/g/os/glog"
"github.com/gogf/gf/g/os/gtimer"
"github.com/gogf/gf/geg/net/gtcp/pkg_operations/common/funcs"
"github.com/gogf/gf/geg/net/gtcp/pkg_operations/common/types"
"time"
)
func main() {
gtcp.NewServer("127.0.0.1:8999", func(conn *gtcp.Conn) {
defer conn.Close()
// 测试消息, 10秒后让客户端主动退出
gtimer.SetTimeout(10*time.Second, func() {
funcs.SendPkg(conn, "doexit")
})
for {
msg, err := funcs.RecvPkg(conn)
if err != nil {
if err.Error() == "EOF" {
glog.Println("client closed")
}
break
}
switch msg.Act {
case "hello": onClientHello(conn, msg)
case "heartbeat": onClientHeartBeat(conn, msg)
default:
glog.Errorfln("invalid message: %v", msg)
break
}
}
}).Run()
}
func onClientHello(conn *gtcp.Conn, msg *types.Msg) {
glog.Printfln("hello message from [%s]: %s", conn.RemoteAddr().String(), msg.Data)
funcs.SendPkg(conn, msg.Act, "Nice to meet you!")
}
func onClientHeartBeat(conn *gtcp.Conn, msg *types.Msg) {
glog.Printfln("heartbeat from [%s]", conn.RemoteAddr().String())
}

View File

@ -0,0 +1,17 @@
package types
import "github.com/gogf/gf/g"
type Msg struct {
Act string // 操作
Data string // 数据
}
type NodeInfo struct {
Cpu float32 // CPU百分比(%)
Host string // 主机名称
Ip g.Map // IP地址信息(可能多个)
MemUsed int // 内存使用(byte)
MemTotal int // 内存总量(byte)
Time int // 上报时间(时间戳)
}

View File

@ -0,0 +1,39 @@
package main
import (
"fmt"
"github.com/gogf/gf/g/net/gtcp"
"github.com/gogf/gf/g/os/glog"
"github.com/gogf/gf/g/util/gconv"
"time"
)
func main() {
// Server
go gtcp.NewServer("127.0.0.1:8999", func(conn *gtcp.Conn) {
defer conn.Close()
for {
data, err := conn.RecvPkg()
if err != nil {
fmt.Println(err)
break
}
fmt.Println("receive:", data)
}
}).Run()
time.Sleep(time.Second)
// Client
conn, err := gtcp.NewConn("127.0.0.1:8999")
if err != nil {
panic(err)
}
defer conn.Close()
for i := 0; i < 10000; i++ {
if err := conn.SendPkg([]byte(gconv.String(i))); err != nil {
glog.Error(err)
}
time.Sleep(1*time.Second)
}
}

View File

@ -0,0 +1,38 @@
package main
import (
"fmt"
"github.com/gogf/gf/g/net/gtcp"
"github.com/gogf/gf/g/os/glog"
"time"
)
func main() {
// Server
go gtcp.NewServer("127.0.0.1:8999", func(conn *gtcp.Conn) {
defer conn.Close()
for {
data, err := conn.RecvPkg()
if err != nil {
fmt.Println(err)
break
}
fmt.Println("RecvPkg:", string(data))
}
}).Run()
time.Sleep(time.Second)
// Client
conn, err := gtcp.NewConn("127.0.0.1:8999")
if err != nil {
panic(err)
}
defer conn.Close()
for i := 0; i < 10000; i++ {
if err := conn.SendPkg(nil); err != nil {
glog.Error(err)
}
time.Sleep(1*time.Second)
}
}

View File

@ -0,0 +1,44 @@
package main
import (
"encoding/json"
"github.com/gogf/gf/g"
"github.com/gogf/gf/g/net/gtcp"
"github.com/gogf/gf/g/os/glog"
"github.com/gogf/gf/g/os/gtime"
"github.com/gogf/gf/geg/net/gtcp/pkg_operations/monitor/types"
)
func main() {
// 数据上报客户端
conn, err := gtcp.NewConn("127.0.0.1:8999")
if err != nil {
panic(err)
}
defer conn.Close()
// 使用JSON格式化数据字段
info, err := json.Marshal(types.NodeInfo{
Cpu : float32(66.66),
Host : "localhost",
Ip : g.Map {
"etho" : "192.168.1.100",
"eth1" : "114.114.10.11",
},
MemUsed : 15560320,
MemTotal : 16333788,
Time : int(gtime.Second()),
})
if err != nil {
panic(err)
}
// 使用 SendRecvPkg 发送消息包并接受返回
if result, err := conn.SendRecvPkg(info); err != nil {
if err.Error() == "EOF" {
glog.Println("server closed")
}
} else {
glog.Println(string(result))
}
}

View File

@ -0,0 +1,31 @@
package main
import (
"encoding/json"
"github.com/gogf/gf/g/net/gtcp"
"github.com/gogf/gf/g/os/glog"
"github.com/gogf/gf/geg/net/gtcp/pkg_operations/monitor/types"
)
func main() {
// 服务端,接收客户端数据并格式化为指定数据结构,打印
gtcp.NewServer("127.0.0.1:8999", func(conn *gtcp.Conn) {
defer conn.Close()
for {
data, err := conn.RecvPkg()
if err != nil {
if err.Error() == "EOF" {
glog.Println("client closed")
}
break
}
info := &types.NodeInfo{}
if err := json.Unmarshal(data, info); err != nil {
glog.Errorfln("invalid package structure: %s", err.Error())
} else {
glog.Println(info)
conn.SendPkg([]byte("ok"))
}
}
}).Run()
}

View File

@ -0,0 +1,12 @@
package types
import "github.com/gogf/gf/g"
type NodeInfo struct {
Cpu float32 // CPU百分比(%)
Host string // 主机名称
Ip g.Map // IP地址信息(可能多个)
MemUsed int // 内存使用(byte)
MemTotal int // 内存总量(byte)
Time int // 上报时间(时间戳)
}