读循环里面确实不应该用PHP_NORMAL_READ这个选项

去掉PHP_NORMAL_READ这个选项也不能解决问题,有解决方法吗

我都是用流函数实现的。

ip = $ip; $this->port = $port; // self::init(); // $this->createServer(); $this->log('listenning user...'); $this->listenningUser(); } protected function createServer() { $errno; $errstr; $this->webSocket = stream_socket_server("tcp://" . $this->ip . ':' . $this->port, $errno, $errstr); if (!$this->webSocket) { self::log("$errstr ($errno)"); exit(); } $this->log('server ok .'); } protected function listenningUser() { while (true) { $this->userIndex++; $user = $this->users[$this->userIndex] = stream_socket_accept($this->webSocket, 9999999999); // if (is_resource($this->users[$this->userIndex - 1])) { $u = $this->users[$this->userIndex - 1]; $u->close(); $u = NULL; unset($this->users[$this->userIndex - 1]); } // $this->log('连入新用户'); $this->listenningMessage(); } } protected function listenningMessage() { while (is_resource($this->users[$this->userIndex])) { $this->message = stream_socket_recvfrom($this->users[$this->userIndex], 10270000); if (!$this->message) { $this->closeUser(); break; } $this->messageOperate(); } } function messageOperate() { $this->log("收到消息:"); $this->log($this->message); //mb_strstr($haystack, $needle, $before_needle, $encoding) $this->sendMessage('done'); } function sendMessage($msg) { if($msg===''){ return -1; } return stream_socket_sendto($this->users[$this->userIndex], $msg); } public function closeUser() { if (!is_resource($this->users[$this->userIndex])) return FALSE; @stream_socket_shutdown($this->users[$this->userIndex], STREAM_SHUT_RDWR); @fclose($this->users[$this->userIndex]); $this->log("用户连接断开."); return TRUE; } public function shutdown() { stream_socket_shutdown($this->webSocket, STREAM_SHUT_RDWR); fclose($this->webSocket); } protected static function init() { error_reporting(E_ALL ^ E_NOTICE); set_time_limit(0); ob_implicit_flush(); date_default_timezone_set('Asia/Shanghai'); ignore_user_abort(TRUE); mb_internal_encoding('gbk'); } protected static function log($message) { echo "\r\n" . $message . "\r\n"; }}$server = new SocketServer();

init(); $this->client = stream_socket_client("tcp://$domain:$port", $errno, $errstr, 300000); if (!$this->client) { $this->log("$errstr ($errno)"); return FALSE; } $this->log('client ok'); } protected static function init() { error_reporting(E_ALL ^ E_NOTICE); //error_reporting(0); set_time_limit(0); ob_implicit_flush(); date_default_timezone_set('Asia/Shanghai'); ignore_user_abort(TRUE); mb_internal_encoding('gbk'); } public function sendMessage($msg) { if ($msg === '') { return -1; } try { stream_socket_sendto($this->client, $msg); } catch (Exception $exc) { //$this->log($exc->getTraceAsString()); } } public function getMessage() { $this->message = stream_socket_recvfrom($this->client, 10270000); //$this->log("收到消息:"); //$this->log($this->message); fwrite(STDOUT, $this->message . "\r\n"); } public function shutdown() { stream_socket_shutdown($this->client, STREAM_SHUT_RDWR); fclose($this->client); } public static function log($message) { echo "\r\n" . $message . "\r\n"; }}//$client = new SocketClient('127.0.0.1',12345);while (true) { $msg = fread(STDIN, 9999999); if (!trim($msg)) { continue; } $client->sendMessage($msg); $client->getMessage();}

while (true) { $msg = socket_accept ($socket); // 接受一个SOCKET if (!$msg) { echo "socket_accept() failed:".socket_strerror ($msg)."\n"; break; } while (true) { $command = strtoupper (trim (socket_read ($msg, 1024))); //等待客户端数据 if (!$command) break; //相关处理,比如直接回显 socket_write ($msg, $command, strlen ($command)); } socket_close ($msg); if ($command == "QUIT") //如果收到的是通讯结束 break;}socket_close ($socket); // 关闭SOCKET

版主好

这里我需要读取完client放的数据分析后才能write回client端,你想让client那边发送quit命令结束socket,这个在线上环境不能实现。还有更好的办法吗?多谢各位!!

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

php读文阻塞,php socket编程 读完成后写阻塞相关推荐

  1. 【C++ Socket编程】(二)阻塞+多线程

    1. 阻塞模型 2. 阻塞+多线程 3. select 4. 异步IO 5. IOCP 6. epoll 7. Reactor和Proactor 文章目录 阻塞+多线程的服务端 在上一篇[C++ So ...

  2. php socket read 阻塞,php socket编程:客户端异常关闭导致服务端中断的问题

    socket_recv和socket_read都可以用于读取socket数据,不过二者有差别,推荐使用socket_recv. 原因如下: 1.socket_recv支持多种flag,用于不同场景 2 ...

  3. ruby非阻塞式socket编程--写飞信客户端的经验总结

    最近在使用ruby编写飞信客户端时,遇到TCPSocket的阻塞问题,socket总是直接挂死或者超时失败.经过一番探索,下面的方法颇有奇效,终于可以成功发短信啦: require "soc ...

  4. linux 非阻塞 socket,linux 非阻塞式socket编程求助。。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一下客户端: #include #include #include #include #include #include #include #includ ...

  5. linux C非阻塞延时,linux 非阻塞式socket编程求助。。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一下客户端: #include #include #include #include #include #include #include #includ ...

  6. socket 非阻塞 linux,linux 非阻塞式socket编程求助。。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一下客户端: #include #include #include #include #include #include #include #includ ...

  7. linux非阻塞通话编程,linux 非阻塞式socket编程求助。。

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 一下客户端: #include #include #include #include #include #include #include #includ ...

  8. java write阻塞_java socket/output stream writes:他们阻塞?

    在Socket上的写也可以阻塞,特别是如果它是一个TCP套接字. OS将仅缓冲一定量的未发射(或发射但未确认)的数据.如果你写的东西快于远程应用程序能够读取它,套接字最终会备份,你的写调用将被阻塞. ...

  9. asp.core api 通过socket和服务器通信发送udp_读懂Java中的Socket编程

    Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一.如今大多数基于网络的软件,如浏览器,即时通讯工具甚至是P2P下载都是基于Socket实现的.本文会介绍一下基于TCP/IP的S ...

最新文章

  1. idea中package和directory的区别
  2. 支持 简体,繁体,英文的js日历控件
  3. web前端项目详解:OPPO首页进度条特效(定时轮播)
  4. storm-starter 例子学习
  5. oracle concat和,concat和||之間是否存在性能差異?在oracle
  6. 史上最经典的数据库面试题之一
  7. 服务器2003系统序列号,Windows Server 2003 R2 With Sp2 序列号
  8. Visio高级使用技巧
  9. HALCON 控制变量没有被初始化_OA大典故障案例摘录【第1397篇】理光2501如何载体初始化 ?...
  10. 自动控制原理知识点梳理——1. 自动控制的一般概念 2. 控制系统的数学模型
  11. 如何在word中批量编辑所有图片的大小?
  12. 封锁阳光大学(染色)
  13. 计算机无法打开文档,电脑word文档打不开怎么办【原因分析及解决方法】
  14. Python项目 huobi量化交易系统
  15. 用C语言打印平行四边形
  16. 三度盈利,51Talk稳了吗?
  17. 怎么把png格式图片转换成jpg格式?
  18. 2022 SMUCTF 永远都对-rui WriteUp
  19. 苹果cmsv10仿电影淘淘PC+WAP爱看的高端免费模板
  20. js 获得明天0点时间戳_开群通知!昨日提示厦门信达、申通地铁、国林科技、隆盛科技全部涨停!明天这只龙头股有望继续涨停!...

热门文章

  1. 关于51CTO博客大赛的感想
  2. WebSocket的C++服务器端实现
  3. 分析 H.265 + AAC 的 FLV 文件
  4. matlab里点云的读入显示和保存
  5. 完整的维纳滤波器Matlab源程序
  6. 计算机学院去微软的大牛的面试经验
  7. 设计模式-行为-职责链
  8. java主键后四位顺序号_JAVA中取顺序号 (转)
  9. pycharm ssh mysql_PyCharm使用之配置SSH Interpreter的方法步骤
  10. oracle fuser lk,oracle错误集锦