server代碼:
$this->socket = stream_socket_server("tcp://0.0.0.0:13008", $errno, $errmsg, STREAM_SERVER_BIND | STREAM_SERVER_LISTEN);
$this->event->add($this->socket, EventInterface::EV_READ, array($this, 'acceptConnection'));
在acceptConnection函數(shù)里直接fwrite一條消息(“hello”)回客戶端
client代碼:
$socket = stream_socket_client('tcp://127.0.0.1:13008', $errno, $errmsg, 5);
if($socket)
{
fwrite($socket, "\n");
while(!feof($socket))
{
var_dump(fgets($socket, 1024));
}
fclose($socket);
}
問(wèn)題:
在client代碼中,stream_socket_client請(qǐng)求之后,并不會(huì)觸發(fā)socket讀事件,所以要先f(wàn)write一條消息,才能獲取serve返回的數(shù)據(jù)(“hello”),是這樣的么?
如果在client不進(jìn)行fwrite,當(dāng)server結(jié)束之后,客戶端為什么能立即收到server返回的‘hello’消息
http://php.net/manual/zh/function.fgets.php
你要看下php手冊(cè),要了解fgets用法,要什么時(shí)候fgets($socket, 1024)才返回。
1、讀取了指定的字節(jié)數(shù)的數(shù)據(jù)
2、讀到了換行符號(hào)
3、讀到了EOF,也就是鏈接斷開(kāi)了
建議你用fread替換fgets。
http://php.net/manual/zh/function.fread.php
同樣也要看看手冊(cè)fread用法