mirror of
https://gitee.com/johng/gf
synced 2026-06-07 10:22:11 +08:00
update gtcp exxamples
This commit is contained in:
@ -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.
|
||||
|
||||
39
geg/net/gtcp/pkg_operations/common/funcs/funcs.go
Normal file
39
geg/net/gtcp/pkg_operations/common/funcs/funcs.go
Normal 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
|
||||
}
|
||||
}
|
||||
60
geg/net/gtcp/pkg_operations/common/gtcp_common_client.go
Normal file
60
geg/net/gtcp/pkg_operations/common/gtcp_common_client.go
Normal 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()
|
||||
}
|
||||
45
geg/net/gtcp/pkg_operations/common/gtcp_common_server.go
Normal file
45
geg/net/gtcp/pkg_operations/common/gtcp_common_server.go
Normal 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())
|
||||
}
|
||||
17
geg/net/gtcp/pkg_operations/common/types/type.go
Normal file
17
geg/net/gtcp/pkg_operations/common/types/type.go
Normal 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 // 上报时间(时间戳)
|
||||
}
|
||||
39
geg/net/gtcp/pkg_operations/gtcp_server_client1.go
Normal file
39
geg/net/gtcp/pkg_operations/gtcp_server_client1.go
Normal 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)
|
||||
}
|
||||
}
|
||||
38
geg/net/gtcp/pkg_operations/gtcp_server_client2.go
Normal file
38
geg/net/gtcp/pkg_operations/gtcp_server_client2.go
Normal 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)
|
||||
}
|
||||
}
|
||||
44
geg/net/gtcp/pkg_operations/monitor/gtcp_monitor_client.go
Normal file
44
geg/net/gtcp/pkg_operations/monitor/gtcp_monitor_client.go
Normal 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))
|
||||
}
|
||||
}
|
||||
31
geg/net/gtcp/pkg_operations/monitor/gtcp_monitor_server.go
Normal file
31
geg/net/gtcp/pkg_operations/monitor/gtcp_monitor_server.go
Normal 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()
|
||||
}
|
||||
12
geg/net/gtcp/pkg_operations/monitor/types/type.go
Normal file
12
geg/net/gtcp/pkg_operations/monitor/types/type.go
Normal 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 // 上报时间(时间戳)
|
||||
}
|
||||
Reference in New Issue
Block a user