ホームページ >バックエンド開発 >PHPチュートリアル >ソケットを見てみても、多くのことがわかりません。

ソケットを見てみても、多くのことがわかりません。

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBオリジナル
2016-06-13 12:59:32961ブラウズ

ソケットについてはよくわかりません
オンラインで HTML5 をダウンロードし、ソケットを 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 phpserver.php
でserver.phpを実行しています。
を見つけました ソケット_select ($changed, $write = NULL, $excel = NULL, NULL);
もう実行されません
インターネットでsocket_selectを調べました
アドレスは http://php.net/manual/en/function.socket-select.php
です。
socket_select ― 指定されたタイムアウトで select() システム コールをソケットの指定された配列で実行します

socket_select() はソケットの配列を受け入れ、それらのステータスが変更されるのを待ちます。BSD ソケットのバックグラウンドを備えたユーザーは、これらのソケット リソース配列が実際にはいわゆるファイル記述子セットであることを認識します。

私の理解によれば、このsocket_selectはソケット配列
内のもののステータスの変化を監視できます ステータスが変化しない場合は中断され実行されません

-----解決策---------------------------- -
socket_select() は接続を待機しています。新しいダイナミクスがあると終了します。これには、最大でブロックできる (実行していると理解できる) 時間を指定する、重要なタイムアウト パラメーターがあります。 NULL を渡すと、リッスンしているすべてのオブジェクトが新しい接続を確立した後でこの関数は終了します。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。