golang tcp服务-3(github发布自己的包和chat项目初始化)
前面写了一个简单的tcp服务包,现在准备利用这个包完成一个聊天功能,正式项目不适合使用,只是为了学习利用golang 开发一个完整的tcp项目
tnet包发布(遇到的问题)
tnet包地址
问题:之前发布tnet包时候go mod init github/timzzx/tnet写成了这样了,下面会报错
root@tdev:/home/code/tnet-chat# go get github.com/timzzx/tnet
go: github.com/timzzx/tnet@v0.0.0-20230227150359-57595e9fc47a: parsing go.mod:
module declares its path as: github/timzzx/tnet
but was required as: github.com/timzzx/tnet
解决问题:
-
gitCommit 把项目中github/timzzx/tnet替换成github.com/timzzx/tnet
-
发布一个tag
但是按照上面解决完还是会报错,最后发现goproxy 有缓存要等一等才能正常
chat项目目录
项目源码 地址
.
├── Client
│ └── main.go // 命令行客户端
├── Handlers
│ └── TestHandler.go // 测试handler
├── LICENSE
├── go.mod
├── go.sum
└── main.go // 启动server
项目启动
main.go
package main
import (
handlers "chat/Handlers"
"github.com/timzzx/tnet"
)
func main() {
s := tnet.NewServer()
// 添加一个handler
s.AddHandlers(1, handlers.NewTestHandler(1))
// 服务启动
s.Start()
}
handler
package handlers
import (
"github.com/timzzx/tnet"
"github.com/timzzx/tnet/types"
)
type TestHandler struct {
id int
}
func NewTestHandler(id int) types.Handler {
return &TestHandler{id: id}
}
func (h *TestHandler) Do(data []byte, agent types.Connection) {
// fmt.Println("handlerID:", h.id, "消息:", )
// 封包并发送
msg, _ := tnet.Pack(h.id, data)
agent.Send(msg)
// agent.Cancel()
}
启动server
root@tdev:/home/code/tnet-chat# go run main.go
TCP服务启动成功...
连接建立成功
客户端
package main
import (
"fmt"
"net"
"time"
"github.com/timzzx/tnet"
)
func main() {
conn, err := net.Dial("tcp", "192.168.1.13:9999")
if err != nil {
fmt.Println("连接失败", err)
}
defer conn.Close()
for {
// 发送消息
msg, err := tnet.Pack(1, []byte("test"))
conn.Write(msg)
if err != nil {
fmt.Println("消息发送失败", err)
return
}
// 接收消息
_, data, err := tnet.Unpack(conn)
if err != nil {
fmt.Println("消息收回", err)
conn.Close()
return
}
fmt.Println(string(data))
time.Sleep(time.Second)
}
}