PHP   发布时间:2022-04-04  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了PHP如何优雅地关闭本地套接字连接…?大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个PHP客户端通过纯文本Unix域套接字连接到本地C服务器程序.但是,使它正常关闭的唯一方法是,如果我完成套接字会话,则:

stream_socket_shutdown($sock, 1); // shutdown socket wriTing
usleep(500 * 1000);           // wait for 0.5 seconds
fclose($sock);                // actually close the socket (finally)

我想像我的C客户一样优雅地关闭它:-

shutdown(connection_fd, SHUT_WR);     // tell server we've stopped sending queries
// Read from the socket until poll(connection_fd) yields POLLRDHUP / POLLHUP / POLLERR / POLLNVAL
shutdown(connection_fd, SHUT_RDWR);   // tell connection we've stopped listening
close(connection_fd);                 // close the whole connection (finally)

但是,PHP似乎没有直接的套接字poll()等效项.如何获得PHP正常关闭本地套接字?

解决方法:

您是否尝试过stream_set_blocking()?如果将流设置为非阻塞,则应该能够在关闭连接之前使用所有待处理的数据:

socket_shutdown($sock, STREAM_SHUT_WR); 
stream_seT_Blocking($sock, 0);
while( fgets($sock) !== false ) { ; }
fclose($sock);

编辑:使用常量,并修复了set-blocking命令以使用正确的值.

说明:通过将流设置为非阻塞然后从中读取所有内容,我们将消耗输入缓冲区中已经存在的所有数据.通过向对等方发信号通知我们的缓冲区已清除,并且他可以向我们发送更多消息(例如FIN数据包),从而极大地加快了关闭过程.

仍然可以缓慢关闭计算机,但是可能性要小得多.

大佬总结

以上是大佬教程为你收集整理的PHP如何优雅地关闭本地套接字连接…?全部内容,希望文章能够帮你解决PHP如何优雅地关闭本地套接字连接…?所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: