• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

瞥socket 好多东西不明白

php 搞代码 4年前 (2022-01-24) 15次浏览 已收录 0个评论

看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.

按我的理解 这个socke

本文来*源gaodai^.ma#com搞#代!码网
搞gaodaima代码

t_select 可以监听到 sockets 数组里面的东西的状态的变化
当状态没有变化的时候 是挂起的 就是不会往下执行
这么理解对吗
——解决方案——————–
socket_select()是等待连接全部有新动态时结束,它有个timeout参数至关重要,其中规定了它最多可以阻塞(可以理解为运行)多长时间。你传入的为 NULL ,则这个函数将会在有所有监听对象有新连接出现后再结束。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:瞥socket 好多东西不明白

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址