瞥socket 好多东西不明白

php中文网
发布: 2016-06-13 11:05:55
原创
1120人浏览过

看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 ,则这个函数将会在有所有监听对象有新连接出现后再结束。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号