Tao 1. Tao解决什么问题2. 50行启动一个聊天服务器 介绍
Tao 是一个轻量级的 TCP 异步框架,使用 Go 语言实现,
1. Tao解决什么问题
1.1 场景
你开发的产品有一套特有的业务逻辑,要通过互联网得到服务端的支持才能为你的客户提供服务。
1.2 问题
怎样快速稳定地实现产品的功能,而不需要耗费大量的时间处理各种底层的网络通信细节。
1.3 解决方案
Tao提供了一种用框架支撑业务逻辑的机制。你只需要与客户端定义好消息格式,然后将对应的业务逻辑编写成函数注册到框架中就可以了。
2. 50行启动一个聊天服务器
让我们举一个例子来看看如何使用Tao框架实现一个简单的群聊天服务器。服务器端代码可以这么写:
package main import ( "fmt" "net" "github.com/leesper/holmes" "github.com/leesper/tao" "github.com/leesper/tao/examples/chat" ) // ChatServer is the chatting server. type ChatServer struct { *tao.Server } // NewChatServer returns a ChatServer. func NewChatServer() *ChatServer { onConnectOption := tao.OnConnectOption(func(conn tao.WriteCloser) bool { holmes.Infoln("on connect") return true }) onErrorOption := tao.OnErrorOption(func(conn tao.WriteCloser) { holmes.Infoln("on error") }) onCloSEOption := tao.OnCloSEOption(func(conn tao.WriteCloser) { holmes.Infoln("close chat client") }) return &ChatServer{ tao.NewServer(onConnectOption, onErrorOption, onCloSEOption), } } func main() { defer holmes.Start().Stop() tao.Register(chat.ChatMessage, chat.DeserializeMessage, chat.ProcessMessage) l, err := net.Listen("tcp", fmt.Sprintf("%s:%d", "0.0.0.0", 12345)) if err != nil { holmes.Fatalln("listen error", err) } chatServer := NewChatServer() err = chatServer.Start(l) if err != nil { holmes.Fatalln("start error", err) } }
启动一个服务器只需要三步就能完成。首先注册消息和业务逻辑回调,其次填入IP地址和端口,最后Start一下就可以了。这时候客户端就能够发起连接,并开始聊天。业务逻辑的实现很简单,遍历所有的连接,然后发送数据:
// ProcessMessage handles the Message logic. func ProcessMessage(ctx context.Context, conn tao.WriteCloser) { holmes.Infof("ProcessMessage") s, ok := tao.ServerFromContext(ctx) if ok { msg := tao.MessageFromContext(ctx) s.broadcast(msg) } }
Tao 1. Tao解决什么问题2. 50行启动一个聊天服务器 官网
https://github.com/leesper/tao
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。