Open nicktyx opened 3 years ago
What did you do? If possible, provide a simple script for reproducing the error.
我在回调函数onClose中对关闭的客户端写入的日志并写入了fd,断开是属于心跳包发送超时服务器主动断开客户端的。
What did you expect to see?
What did you see instead?
发现隔段时间后会重复收到一次同个fd的回调,在写入的数据库中看到的
What version of Swoole are you using (show your php --ri swoole)?
swoole Swoole => enabled Author => Swoole Team <team@swoole.com> Version => 4.5.8 Built => Nov 21 2020 08:09:18 coroutine => enabled trace_log => enabled epoll => enabled eventfd => enabled signalfd => enabled cpu_affinity => enabled spinlock => enabled rwlock => enabled sockets => enabled openssl => OpenSSL 1.0.2k-fips 26 Jan 2017 http2 => enabled json => enabled pcre => enabled zlib => 1.2.7 mutex_timedlock => enabled pthread_barrier => enabled futex => enabled mysqlnd => enabled async_redis => enabled Directive => Local Value => Master Value swoole.enable_coroutine => On => On swoole.enable_library => On => On swoole.enable_preemptive_scheduler => Off => Off swoole.display_errors => On => On swoole.use_shortname => Off => Off swoole.unixsock_buffer_size => 8388608 => 8388608
# uname -a Linux VM-0-15-centos 3.10.0-1127.19.1.el7.x86_64 #1 SMP Tue Aug 25 17:23:54 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux # php -v Zend Engine v3.3.26, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.3.26, Copyright (c) 1999-2018, by Zend Technologies # gcc -v 使用内建 specs。 COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/4.8.5/lto-wrapper 目标:x86_64-redhat-linux 配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-bootstrap --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,objc,obj-c++,java,fortran,ada,go,lto --enable-plugin --enable-initfini-array --disable-libgcj --with-isl=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/isl-install --with-cloog=/builddir/build/BUILD/gcc-4.8.5-20150702/obj-x86_64-redhat-linux/cloog-install --enable-gnu-indirect-function --with-tune=generic --with-arch_32=x86-64 --build=x86_64-redhat-linux 线程模型:posix gcc 版本 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
确实有这个可能性的,底层并不保证 onClose 一定只有一次,特殊情况下,主动和被动、心跳强制切断,可能会出现重复的情况。
onClose
What did you do? If possible, provide a simple script for reproducing the error.
我在回调函数onClose中对关闭的客户端写入的日志并写入了fd,断开是属于心跳包发送超时服务器主动断开客户端的。
What did you expect to see?
What did you see instead?
发现隔段时间后会重复收到一次同个fd的回调,在写入的数据库中看到的
What version of Swoole are you using (show your php --ri swoole)?