瞥socket 好多东西不明白
Jun 13, 2016 pm 12:59 PM
master
nbsp
select
socket
this
看socket 好多东西不明白
网上下了个html5 发socket 给php.server
php.server里面有些地方不明白呀
部分代码
function __construct ($address, $port) {<br /> error_reporting (E_ALL);<br /> set_time_limit (0);<br /> ob_implicit_flush ();<br /> <br /> // Socket creation<br /> $this->master = socket_create (AF_INET, SOCK_STREAM, SOL_TCP) or die("socket_create() failed");<br /> socket_set_option ($this->master, SOL_SOCKET, SO_REUSEADDR, 1) or die("socket_option() failed");<br /> socket_bind ($this->master, $address, $port) or die("socket_bind() failed");<br /> socket_listen ($this->master, 20) or die("socket_listen() failed");<br /> $this->sockets[] = $this->master;<br /> $this->say ("Server Started : " . date ('Y-m-d H:i:s'));<br /> $this->say ("Listening on : {$address} {$port}");<br /> $this->say ("Master socket : {$this->master}\n");<br /> <br /> // Main loop<br /> while (true) {<br /> <br /> $changed = $this->sockets;<br /> socket_select ($changed, $write = NULL, $except = NULL, NULL);<br /> <br /> foreach ($changed as $socket) {<br /> if ($socket == $this->master) {<br /> <br /> <br /> $client = socket_accept ($this->master);<br /> <br /> if ($client < 0) {<br /> $this->log ("socket_accept() failed");<br /> continue;<br /> }<br /> else {<br /> // Connects the socket<br /> $this->connect ($client);<br /> }<br /> }<br /> else {<br /> <br /> $bytes = @socket_recv ($socket, $buffer, 2048, 0);<br /> if ($bytes == 0) {<br /> // On socket.close ();<br /> $this->disconnect ($socket);<br /> }<br /> else {<br /> // Retrieve the user from his socket<br /> $user = $this->getuserbysocket ($socket);<br /> <br /> if (!$user->handshake) {<br /> $this->dohandshake ($user, $buffer);<br /> }<br /> else {<br /> $this->process ($user, $this->decode ($buffer));<br /> }<br /> }<br /> }<br /> }<br /> }<br /> }
登录后复制
我现在linux 下运行了 server.php php server.php
我发现
socket_select ($changed, $write = NULL, $except = NULL, NULL);的时候
就不会在往下下运行了
我在网上查了下socket_select
地址是http://php.net/manual/en/function.socket-select.php
socket_select ― Runs the select() system call on the given arrays of sockets with a specified timeout
socket_select() accepts arrays of sockets and waits for them to change status. Those coming with BSD sockets background will recognize that those socket resource arrays are in fact the so-called file descriptor sets. Three independent arrays of socket resources are watched.
按我的理解 这个socket_select 可以监听到 sockets 数组里面的东西的状态的变化
当状态没有变化的时候 是挂起的 就是不会往下执行
这么理解对吗
------解决方案--------------------
socket_select()是等待连接全部有新动态时结束,它有个timeout参数至关重要,其中规定了它最多可以阻塞(可以理解为运行)多长时间。你传入的为 NULL ,则这个函数将会在有所有监听对象有新连接出现后再结束。
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
击败分裂小说需要多长时间?
3 周前
By DDD
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

OOBELANGUAGE错误Windows 11 / 10修复中出现问题的问题
