?php
class EchoServer {
protected $serv = null;
public function __construct() {
$this->serv = new swoole_server('0.0.0.0', 8888);
//配置參數(shù)
$this->serv->set(array(
'worker_num' => 4,
'daemonize' => 0,
));
//注冊回調函數(shù)
$this->serv->on('start', array($this, 'start'));
$this->serv->on('connect', array($this, 'connect'));
$this->serv->on('receive', array($this, 'receive'));
$this->serv->on('close', array($this, 'close'));
//啟動服務
$this->serv->start();
}
public function start($serv) {
echo "start \n";
}
//有客戶端連接時
public function connect($serv, $fd) {
echo "connect \n";
$serv->send($fd, "hello \n");
}
public function close($serv, $fd) {
echo "close \n";
}
public function receive($serv, $fd, $from_id, $data) {
echo "get message {$fd} : {$data} \n";
//向客戶端發(fā)送信息
$serv->send($fd, $data . "\n");
}
}
$serv = new EchoServer();
?php
class EchoClient {
protected $client = null;
public function __construct() {
//注意這里需設置為異步,不然下面無法設置事件回調函數(shù)
$this->client = new swoole_client(SWOOLE_SOCK_TCP, SWOOLE_SOCK_ASYNC);
$this->client->on('connect', array($this, 'connect'));
$this->client->on('receive', array($this, 'receive'));
$this->client->on('close', array($this, 'close'));
$this->client->on('error', array($this, 'error'));
//連接服務端
$this->client->connect('0.0.0.0', 8888);
}
public function connect($client) {
echo "connect \n";
}
public function receive($client, $data) {
echo "server send: {$data}";
//向標準輸出寫入數(shù)據(jù)
fwrite(STDOUT, "請輸入消息:");
//獲取標準輸入數(shù)據(jù)
$msg = trim(fgets(STDIN));
//向服務端發(fā)送數(shù)據(jù)
$client->send($msg);
}
public function close($client) {
echo "close \n";
}
public function error($client) {
echo "error \n";
}
}
$cli = new EchoClient();
更多關于PHP相關內(nèi)容感興趣的讀者可查看本站專題:《PHP網(wǎng)絡編程技巧總結》、《php socket用法總結》、《php面向對象程序設計入門教程》、《PHP數(shù)據(jù)結構與算法教程》及《php程序設計算法總結》