mirror of
https://github.com/Mrs4s/go-cqhttp.git
synced 2025-05-05 03:23:49 +08:00
⚡ websocket read with buffer pool
This commit is contained in:
parent
5e52cecd71
commit
3301077c46
@ -128,7 +128,7 @@ func (e *PokeElement) Type() message.ElementType {
|
|||||||
|
|
||||||
// ToArrayMessage 将消息元素数组转为MSG数组以用于消息上报
|
// ToArrayMessage 将消息元素数组转为MSG数组以用于消息上报
|
||||||
func ToArrayMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r []MSG) {
|
func ToArrayMessage(e []message.IMessageElement, id int64, isRaw ...bool) (r []MSG) {
|
||||||
r = []MSG{}
|
r = make([]MSG, 0, len(e))
|
||||||
ur := false
|
ur := false
|
||||||
if len(isRaw) != 0 {
|
if len(isRaw) != 0 {
|
||||||
ur = isRaw[0]
|
ur = isRaw[0]
|
||||||
|
@ -179,13 +179,25 @@ func (c *WebSocketClient) connectUniversal() {
|
|||||||
func (c *WebSocketClient) listenAPI(conn *webSocketConn, u bool) {
|
func (c *WebSocketClient) listenAPI(conn *webSocketConn, u bool) {
|
||||||
defer conn.Close()
|
defer conn.Close()
|
||||||
for {
|
for {
|
||||||
_, buf, err := conn.ReadMessage()
|
buffer := global.NewBuffer()
|
||||||
|
t, reader, err := conn.NextReader()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warnf("监听反向WS API时出现错误: %v", err)
|
log.Warnf("监听反向WS API时出现错误: %v", err)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
_, err = buffer.ReadFrom(reader)
|
||||||
go conn.handleRequest(c.bot, buf)
|
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 {
|
if c.conf.ReverseReconnectInterval != 0 {
|
||||||
time.Sleep(time.Millisecond * time.Duration(c.conf.ReverseReconnectInterval))
|
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) {
|
func (s *webSocketServer) listenAPI(c *webSocketConn) {
|
||||||
defer c.Close()
|
defer c.Close()
|
||||||
for {
|
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 {
|
if err != nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
||||||
if t == websocket.TextMessage {
|
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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user