panjf2000 / gnet

🚀 gnet is a high-performance, lightweight, non-blocking, event-driven networking framework written in pure Go.
https://gnet.host
Apache License 2.0
9.7k stars 1.04k forks source link

[Feature]: v2 版本能否支持下 服务热重启?? 复用之前的 fd 文件描述符 #462

Closed caohao-go closed 1 year ago

caohao-go commented 1 year ago

Description of new feature

v2 版本能否支持下优雅重启,支持下暴露 fd 和 SetFD 功能,复用之前的 listener fd 句柄。

Scenarios for new feature

v2 版本能否支持下优雅重启,支持下暴露 fd 和 SetFD 功能,复用之前的 listener fd 句柄。

Breaking changes or not?

Yes

Code snippets (optional)

No response

Alternatives for new feature

None.

Additional context (optional)

None.

panjf2000 commented 1 year ago

listener 的 fd 你可以通过 API 来 dup 一个,至于你说的 SetFD 具体是要做什么?

caohao-go commented 1 year ago

没事,这个问题已经解决了, 出现了一个问题,在 http 请求里面, c.Next(-1) 并没有拉到整个请求信息,而是只读取了 header 信息, body 信息没有读取,这种情况应该怎么处理? func (hs httpServer) OnTraffic(c gnet.Conn) gnet.Action { hc := c.Context().(httpCodec) buf, _ := c.Next(-1) }

我再次 c.Next 也拉不到更多内容, 但是在下一次 OnTraffic ,会把剩余的 body 信息读出来。