1
0
mirror of https://github.com/Mrs4s/go-cqhttp.git synced 2025-05-04 19:17:37 +08:00

websocket read with buffer pool

This commit is contained in:
wdvxdr 2021-03-18 22:32:54 +08:00
parent 5e52cecd71
commit 3301077c46
No known key found for this signature in database
GPG Key ID: 55FF1414A69CEBA6
2 changed files with 28 additions and 6 deletions

View File

@ -128,7 +128,7 @@ func (e *PokeElement) Type() message.ElementType {
// ToArrayMessage 将消息元素数组转为MSG数组以用于消息上报
func ToArrayMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r []MSG) {
r = []MSG{}
r = make([]MSG, 0, len(e))
ur := false
if len(isRaw) != 0 {
ur = isRaw[0]

View File

@ -179,13 +179,25 @@ func (c *WebSocketClient) connectUniversal() {
func (c *WebSocketClient) listenAPI(conn *webSocketConn, u bool) {
defer conn.Close()
for {
_, buf, err := conn.ReadMessage()
buffer := global.NewBuffer()
t, reader, err := conn.NextReader()
if err != nil {
log.Warnf("监听反向WS API时出现错误: %v", err)
break
}
go conn.handleRequest(c.bot, buf)
_, err = buffer.ReadFrom(reader)
if err != nil {
log.Warnf("监听反向WS API时出现错误: %v", err)
break
}
if t == websocket.TextMessage {
go func(buffer *bytes.Buffer) {
defer global.PutBuffer(buffer)
conn.handleRequest(c.bot, buffer.Bytes())
}(buffer)
} else {
global.PutBuffer(buffer)
}
}
if c.conf.ReverseReconnectInterval != 0 {
time.Sleep(time.Millisecond * time.Duration(c.conf.ReverseReconnectInterval))
@ -309,13 +321,23 @@ func (s *webSocketServer) any(w http.ResponseWriter, r *http.Request) {
func (s *webSocketServer) listenAPI(c *webSocketConn) {
defer c.Close()
for {
t, payload, err := c.ReadMessage()
buffer := global.NewBuffer()
t, reader, err := c.NextReader()
if err != nil {
break
}
_, err = buffer.ReadFrom(reader)
if err != nil {
break
}
if t == websocket.TextMessage {
go c.handleRequest(s.bot, payload)
go func(buffer *bytes.Buffer) {
defer global.PutBuffer(buffer)
c.handleRequest(s.bot, buffer.Bytes())
}(buffer)
} else {
global.PutBuffer(buffer)
}
}
}