Replies: 4 comments 8 replies
-
我不明白这是什么问题。 但你可以考虑使用其它 websocket 模块,或改进 skynet 附带的 websocket 模块。 |
Beta Was this translation helpful? Give feedback.
-
我看了一下,https://github.com/cloudwu/skynet/blob/master/lualib/http/websocket.lua#L86 这里调用 recvheader 后,返回值 |
Beta Was this translation helpful? Give feedback.
-
描述的可能有点误解, |
Beta Was this translation helpful? Give feedback.
-
原因正是这个。 |
Beta Was this translation helpful? Give feedback.
-
场景:
client通过server的http post消息中获取到server的ip,port信息,
client得到host内容后向server发起handshake。
server升级websocket协议后,立即向client发送第一条websocket请求。
现象:
skynet websocket clent运行在同一个环境中,server运行在不同环境中,
极少数环境中,出现第一条websocket请求body不完整的现象。
定位:
server运行在不同环境,101 Switching Protocols与第一条websocket请求间隔不同。
间隔非常短时,100us左右或更快时,epoll的2次read event,分别读到64,128字节。
在websocket client处理handshake中会pop出来64+128字节的内容。
即,skynet/lualib/http/internal.lua中M.request的local body = M.recvheader(read, tmpline, "")
而,128字节中包含了第一条websocket请求的部分内容。
临时解决方案:server发送第一条websocket请求前延时100ms,现象不再出现。
TODO:期望云风大大优化一下。
Beta Was this translation helpful? Give feedback.
All reactions