go实现一个简单的游戏服务器框架(lotou)网络通信
2016-12-09 10:37
911 查看
代码仓库
网络通信相关代码请查下以下链接(https://github.com/sydnash/lotou/tree/master/network/tcp)
目前网络通信只实现了基于go的tcp的通信。
net.ResolveTCPAddr 讲一个string类型的网络地址转换成一个TCPAddr 可以是tcp4 tcp6 tcp类型的地址
TCPListener TCP的监听器,负责接收请求并创建一个新的tcp连接
net.ListenTCP 在一个指定的端口和地址上监听tcp连接,如果端口是0,则内部随机选取一个可以用的端口。
(*TCPListener) AcceptTCP 阻塞调用goroutinue,直到有一个新的连接到来或者错误产生的时候,如果没有错误,则返回一个新的tcp连接。
TCPConn 表示一个tcp连接,通过它可以和远端进行数据的收发
func DialTCP(net string, laddr, raddr *TCPAddr) (*TCPConn, error) 请一个远程连接,laddr通常都是传入nil。
func (*TCPConn) Close 关闭一个tcp连接,关闭之后再进行读取将会返回error
func (*TCPConn) SetReadDeadline 设置读取数据的超时时间
func (*TCPConn) SetWriteDeadline 设置写数据的超时时间
func (*TCPConn) Write 发送数据
func (*TCPConn) Read 接收数据,会阻塞当前goroutinue知道有数据可读,如果设置了超时时间,则如果超时也会返回。
func (*TCPConn) SetKeepAlive 启动keepAlive之后,将会是操作系统层也会发送keepalive message,类似于应用层的心跳包的功能
func (*TCPConn) SetNoDelay 设置系统是否延迟发送小包数据,默认是true,表示数据在Write后立即发送。如果只关注每秒传输的量而不是打个packet延迟,可以考虑设置为false,这样可以减少系统调用,但是小包可能被延迟到某个时刻才发送。
server 负责创建一个监听socket,当了连接请求的时候接受连接并创建一个agent
tcp.New 创建一个新的tcp server,并设置消息接收者
agent 负责每个连接的消息发送和接收
每一个agent就相当于一个服务,一个agent开始运行之后,会启动一个定时器,如果这个TCPCon在一定时间内没有收到数据包,将会自行关闭。
当有数据到来或者网络错误的时候,会将消息转发给关联的服务进行进一步处理。
client 负责请求远程连接以及socket上消息发送接收
client接收连接、发送数据的命令
client不需要显示的连接命令,当有数据需要发送的时候,会自动去请求连接
其他服务通过服务间的通信机制向agent和client发送消息,client、agent根据消息类型进行不同的操作。
client和agent内部都有两个goroutinue
- 一个用于处理其他服务发送过来的消息
- 一个用于从网络中接收数据并分包,一个合法的数据包有一个2字节的包长度开始。
该模块出了分包,不负责数据的编解码。
在该模块下有一个简单的测试用例,包含了基本用法。
网络通信相关代码请查下以下链接(https://github.com/sydnash/lotou/tree/master/network/tcp)
目前网络通信只实现了基于go的tcp的通信。
go的tcp相关的主要接口
net.JoinHostPort 将一个host和port组成一个合法的网络地址(host:port)net.ResolveTCPAddr 讲一个string类型的网络地址转换成一个TCPAddr 可以是tcp4 tcp6 tcp类型的地址
TCPListener TCP的监听器,负责接收请求并创建一个新的tcp连接
net.ListenTCP 在一个指定的端口和地址上监听tcp连接,如果端口是0,则内部随机选取一个可以用的端口。
(*TCPListener) AcceptTCP 阻塞调用goroutinue,直到有一个新的连接到来或者错误产生的时候,如果没有错误,则返回一个新的tcp连接。
TCPConn 表示一个tcp连接,通过它可以和远端进行数据的收发
func DialTCP(net string, laddr, raddr *TCPAddr) (*TCPConn, error) 请一个远程连接,laddr通常都是传入nil。
func (*TCPConn) Close 关闭一个tcp连接,关闭之后再进行读取将会返回error
func (*TCPConn) SetReadDeadline 设置读取数据的超时时间
func (*TCPConn) SetWriteDeadline 设置写数据的超时时间
func (*TCPConn) Write 发送数据
func (*TCPConn) Read 接收数据,会阻塞当前goroutinue知道有数据可读,如果设置了超时时间,则如果超时也会返回。
func (*TCPConn) SetKeepAlive 启动keepAlive之后,将会是操作系统层也会发送keepalive message,类似于应用层的心跳包的功能
func (*TCPConn) SetNoDelay 设置系统是否延迟发送小包数据,默认是true,表示数据在Write后立即发送。如果只关注每秒传输的量而不是打个packet延迟,可以考虑设置为false,这样可以减少系统调用,但是小包可能被延迟到某个时刻才发送。
lotou网络部分基本结构
在network/tcp目录下一个一共有三个文件server 负责创建一个监听socket,当了连接请求的时候接受连接并创建一个agent
tcp.New 创建一个新的tcp server,并设置消息接收者
agent 负责每个连接的消息发送和接收
每一个agent就相当于一个服务,一个agent开始运行之后,会启动一个定时器,如果这个TCPCon在一定时间内没有收到数据包,将会自行关闭。
当有数据到来或者网络错误的时候,会将消息转发给关联的服务进行进一步处理。
client 负责请求远程连接以及socket上消息发送接收
client接收连接、发送数据的命令
client不需要显示的连接命令,当有数据需要发送的时候,会自动去请求连接
其他服务通过服务间的通信机制向agent和client发送消息,client、agent根据消息类型进行不同的操作。
client和agent内部都有两个goroutinue
- 一个用于处理其他服务发送过来的消息
- 一个用于从网络中接收数据并分包,一个合法的数据包有一个2字节的包长度开始。
该模块出了分包,不负责数据的编解码。
在该模块下有一个简单的测试用例,包含了基本用法。
相关文章推荐
- go实现一个简单的游戏服务器框架(lotou)多节点
- go实现一个简单的游戏服务器框架(lotou)编码
- go实现一个简单的游戏服务器框架(lotou)基本设计
- go实现一个简单的游戏服务器框架(lotou)起源
- 一个简单的游戏服务器框架
- 一个简单的游戏服务器框架
- 一个简单的游戏服务器框架
- 一个简单的游戏服务器框架
- 一个非常简单的.net网络通信框架XNetFramework(符源码与测试Demo)
- 一个简单的游戏服务器框架
- 一个简单的游戏服务器框架
- 一个简单的游戏服务器框架
- 一个简单的游戏服务器框架
- 一个简单的游戏服务器框架
- 一个简单的游戏服务器框架
- 一个简单的游戏服务器框架
- 利用boost::asio实现一个简单的服务器框架
- 一个简单的游戏服务器框架
- 用java实现简单的网络通信,相当于一个最简单的控制台qq(附代码) 推荐
- 一个简单的游戏服务器框架