Documentation ¶
Overview ¶
网络套接字通讯功能的封装“Network Socket Transmission”
本包提供了各种类型与[]byte类型之间的转换函数。 并提供了一套tcp服务器和客户端的实现。
TcpClient ¶
TcpClient的使用进程分配功能的流程为(方法的内部流程):
--> 使用*TcpClient.OpenProgress()分配一个连接 --> 从连接池里顺序找下一个连接,如果连接正在被占用则往下找,如果连接断开则尝试重新连接 --> 为这个连接加锁(使用chan实现的锁) --> 发送NORMAL_DATA状态(*TcpClient.checkOneConn2()的检查方法中) --> 返回*ProgressData --> 使用*ProgressData.SendAndReturn([]byte)发送数据并接收服务端返回值和错误值 --> 发送DATA_GOON状态 --> 发送具体数据 <-- 接收返回的DATA_GOON状态 --或者:接受返回的DATA_CLOSE状态 <-- 接收具体返回数据 --或者:抛出字符为“DATA_CLOSE”的错误 --> 可再次使用*ProgressData.SendAndReturn([]byte)发送数据并接收服务端返回值和错误值 ...除非DATA_CLOSE已经关闭 ... --> 使用*ProgressData.Close()关闭这个连接进程 --> 发送DATA_CLOSE状态 --> 释放这个连接的锁
TcpClient的直接发送和接受,不经过进程分配的流程为(方法的内部流程):
--> 使用*TcpClient.SendAndReturn([]byte)发送数据并接收服务端返回值和错误值 --> 使用*TcpClient.OpenProgress()分配一个连接 --> 使用*ProgressData.SendAndReturn([]byte)发送数据并接收服务端返回值和错误值 --> 使用*ProgressData.Close()关闭这个连接进程
[TODO]未来会实现*ProgressData除SendAndReturn以外的方法
TcpClient的长连接心跳维持及中断检测。 每30秒轮询一遍连接池中的连接,只要没有正在被*TcpClient.OpenProgress()分配,则执行:
--> 连接加锁(使用chan实现的锁),无法加锁则认为正在被使用,直接跳过 --> 发送HEART_BEAT状态 --> 如果发送不成功,则进行重新连接 --> 释放连接的锁
TcpServer ¶
TcpServer完全配合TcpClient的心跳机制,以及DATA_GOON、DATA_CLOSE状态的执行。
TcpServer需要接收一个符合nst.ConnExecer接口的执行者负责Client请求的执行,也就是需要提供ExecTCP(ce *ConnExec)方法。
ConnExec是对nst.Tcp的封装,提供了简单直接的发送接收数据以及关闭连接的功能。
Index ¶
- Constants
- func BytesGobReflect(f_b []byte, v reflect.Value) error
- func BytesGobStruct(f_b []byte, stur interface{}) error
- func BytesGobStructForRoleer(by []byte) (roles.Roleer, error)
- func BytesToUint16(buf []byte) uint16
- func BytesToUint32(buf []byte) uint32
- func BytesToUint64(buf []byte) uint64
- func BytesToUint8(buf []byte) uint8
- func JsonToStruct(f_b string, stur interface{}) (err error)
- func StructGobBytes(e interface{}) ([]byte, error)
- func StructGobBytesForRoleer(p roles.Roleer) ([]byte, error)
- func StructToJson(e interface{}) (str string, err error)
- func TcpClientTLS(ts *TcpClient) (err error)
- func TcpServerTLS(ts *TcpServer, pem, key string) (err error)
- func Uint16ToBytes(i uint16) []byte
- func Uint32ToBytes(i uint32) []byte
- func Uint64ToBytes(i uint64) []byte
- func Uint8ToBytes(i uint8) []byte
- type ConnExec
- type ConnExecer
- type Connect
- type ProgressData
- type TCP
- func (t *TCP) Close() (err error)
- func (t *TCP) GetBuf() int
- func (t *TCP) GetBytes(len uint64) (returnByte []byte, err error)
- func (t *TCP) GetData() (bytes []byte, errs error)
- func (t *TCP) GetLen() (len uint64, errs error)
- func (t *TCP) GetStat() (status uint8, errs error)
- func (t *TCP) GetStruct(stru interface{}) (errs error)
- func (t *TCP) GetVer() (version uint32, errs error)
- func (t *TCP) SendBytes(bytes []byte) (err error)
- func (t *TCP) SendData(bytes []byte) (errs error)
- func (t *TCP) SendLen(len uint64) (errs error)
- func (t *TCP) SendStat(status uint8) (errs error)
- func (t *TCP) SendStruct(stru interface{}) (errs error)
- func (t *TCP) SendVer(version uint32) (errs error)
- func (t *TCP) SetBuf(buf int)
- type TcpClient
- type TcpClient2
- type TcpServer
Constants ¶
const ( HEART_BEAT = iota // 心跳 NORMAL_DATA // 普通数据 CONN_CLOSE // 连接断开 DATA_GOON // 数据继续 DATA_CLOSE // 数据关闭 )
Variables ¶
This section is empty.
Functions ¶
func BytesGobStructForRoleer ¶
将[]byte转成Gob再转成roles.Roleer接口的结构体,需要提前用encoding/gob包中的Register方法注册符合roles.Roleer接口的数据类型。
func StructGobBytesForRoleer ¶
将roles.Roleer接口的结构体数据转成Gob再转成[]Byte,需要提前用encoding/gob包中的Register方法注册符合roles.Roleer接口的数据类型。
func TcpServerTLS ¶
新建一个TCP的监听,使用TLS加密。注册一个*TcpServer。
Types ¶
type ProgressData ¶
type ProgressData struct {
// contains filtered or unexported fields
}
进程的数据队列
func (*ProgressData) SendAndReturn ¶
func (p *ProgressData) SendAndReturn(data []byte) (returndata []byte, err error)
发送一段数据并返回服务端的数据,而不是构造桥,会创建连接进程,并首先发送DATA_GOON。
type TCP ¶
type TCP struct {
// contains filtered or unexported fields
}
TCP发送接收数据结构。发送数据的方法必须使用对应类型的接收方法进行接收
func (*TCP) SendStruct ¶
发送一个结构体(会在方法内部转换成gob),只能用GetStruct()方法接受
type TcpClient ¶
type TcpClient struct {
// contains filtered or unexported fields
}
TCP的客户端
func NewTcpClient ¶
建立一个TCP的客户端,并与addr的地址建立连接
func (*TcpClient) OpenProgress ¶
func (tc *TcpClient) OpenProgress() *ProgressData
建立进程,将会固定在一个连接上进行
type TcpClient2 ¶
type TcpClient2 struct {
// contains filtered or unexported fields
}
func NewTcpClient2 ¶
func NewTcpClient2(addr string, max_count int, iftls bool) *TcpClient2
func (*TcpClient2) OpenConnect ¶
func (t *TcpClient2) OpenConnect() (c *Connect, err error)
func (*TcpClient2) OpenProgress ¶
func (t *TcpClient2) OpenProgress() (c *Connect, err error)
type TcpServer ¶
type TcpServer struct {
// contains filtered or unexported fields
}
这是一个使用Tcp协议的服务器端监听组件。 根据设置接收tcp套接字传送来的信息并转交给注册的接收者。
func NewTcpServer ¶
新建一个Tcp的监听。注册一个符合ConnExecer接口的执行者负责真正的处理接口。