perf[golang]: go的zfoo服务器,使用atomic自增作为uuid

This commit is contained in:
godotg
2022-09-15 18:25:17 +08:00
parent c741cd41b8
commit 439ef74853
5 changed files with 34 additions and 34 deletions
+12 -12
View File
@@ -17,15 +17,15 @@ import (
"encoding/binary"
)
// Encode from Message to []byte
func Encode(msg *Message) ([]byte, error) {
// Encode from Packet to []byte
func Encode(msg *Packet) ([]byte, error) {
buffer := new(bytes.Buffer)
err := binary.Write(buffer, binary.LittleEndian, msg.msgSize)
err := binary.Write(buffer, binary.LittleEndian, msg.length)
if err != nil {
return nil, err
}
err = binary.Write(buffer, binary.LittleEndian, msg.msgID)
err = binary.Write(buffer, binary.LittleEndian, msg.protocolId)
if err != nil {
return nil, err
}
@@ -36,29 +36,29 @@ func Encode(msg *Message) ([]byte, error) {
return buffer.Bytes(), nil
}
// Decode from []byte to Message
func Decode(data []byte) (*Message, error) {
// Decode from []byte to Packet
func Decode(data []byte) (*Packet, error) {
bufReader := bytes.NewReader(data)
dataSize := len(data)
// 读取消息ID
var msgID int32
err := binary.Read(bufReader, binary.LittleEndian, &msgID)
var protocolId int16
err := binary.Read(bufReader, binary.LittleEndian, &protocolId)
if err != nil {
return nil, err
}
// 读取数据
dataBufLength := dataSize - 4 - 4
dataBufLength := dataSize - 2 - 4
dataBuf := make([]byte, dataBufLength)
err = binary.Read(bufReader, binary.LittleEndian, &dataBuf)
if err != nil {
return nil, err
}
message := &Message{}
message.msgSize = int32(dataSize)
message.msgID = msgID
message := &Packet{}
message.length = int32(dataSize)
message.protocolId = protocolId
message.data = dataBuf
return message, nil
+4 -4
View File
@@ -29,7 +29,7 @@ type Conn struct {
done chan error
hbTimer *time.Timer
name string
messageCh chan *Message
messageCh chan *Packet
hbInterval time.Duration
hbTimeout time.Duration
}
@@ -45,7 +45,7 @@ func NewConn(c net.Conn, hbInterval time.Duration, hbTimeout time.Duration) *Con
rawConn: c,
sendCh: make(chan []byte, 100),
done: make(chan error),
messageCh: make(chan *Message, 100),
messageCh: make(chan *Packet, 100),
hbInterval: hbInterval,
hbTimeout: hbTimeout,
}
@@ -67,7 +67,7 @@ func (c *Conn) Close() {
}
// SendMessage send message
func (c *Conn) SendMessage(msg *Message) error {
func (c *Conn) SendMessage(msg *Packet) error {
pkg, err := Encode(msg)
if err != nil {
return err
@@ -156,7 +156,7 @@ func (c *Conn) readCoroutine(ctx context.Context) {
continue
}
if msg.msgID == MsgHeartbeat {
if msg.protocolId == MsgHeartbeat {
continue
}
@@ -15,24 +15,24 @@ import (
"fmt"
)
// Message struct
type Message struct {
msgSize int32
msgID int32
data []byte
// Packet struct
type Packet struct {
length int32
protocolId int16
data []byte
}
// NewMessage create a new message
func NewMessage(msgID int32, data []byte) *Message {
msg := &Message{
msgSize: int32(len(data)) + 4 + 4,
msgID: msgID,
data: data,
func NewMessage(protocolId int16, data []byte) *Packet {
msg := &Packet{
length: int32(len(data)) + 4 + 4,
protocolId: protocolId,
data: data,
}
return msg
}
func (msg *Message) String() string {
return fmt.Sprintf("Size=%d ID=%d DataLen=%d", msg.msgSize, msg.msgID, len(msg.data))
func (msg *Packet) String() string {
return fmt.Sprintf("Size=%d ID=%d DataLen=%d", msg.length, msg.protocolId, len(msg.data))
}
+4 -4
View File
@@ -21,7 +21,7 @@ import (
// SocketService struct
type SocketService struct {
onMessage func(*Session, *Message)
onMessage func(*Session, *Packet)
onConnect func(*Session)
onDisconnect func(*Session, error)
sessions *sync.Map
@@ -56,7 +56,7 @@ func NewSocketService(laddr string) (*SocketService, error) {
}
// RegMessageHandler register message handler
func (s *SocketService) RegMessageHandler(handler func(*Session, *Message)) {
func (s *SocketService) RegMessageHandler(handler func(*Session, *Packet)) {
s.onMessage = handler
}
@@ -175,7 +175,7 @@ func (s *SocketService) GetConnsCount() int {
}
// Unicast Unicast with session ID
func (s *SocketService) Unicast(sid string, msg *Message) {
func (s *SocketService) Unicast(sid string, msg *Packet) {
v, ok := s.sessions.Load(sid)
if ok {
session := v.(*Session)
@@ -187,7 +187,7 @@ func (s *SocketService) Unicast(sid string, msg *Message) {
}
// Broadcast Broadcast to all connections
func (s *SocketService) Broadcast(msg *Message) {
func (s *SocketService) Broadcast(msg *Packet) {
s.sessions.Range(func(k, v interface{}) bool {
s := v.(*Session)
if err := s.conn.SendMessage(msg); err != nil {
+2 -2
View File
@@ -45,8 +45,8 @@ func TestService(t *testing.T) {
ss.Serv()
}
func HandleMessage(s *Session, msg *Message) {
fmt.Println("receive msgID:", msg)
func HandleMessage(s *Session, msg *Packet) {
fmt.Println("receive protocolId:", msg)
fmt.Println("receive data:", string(msg.data))
}