# 搭建Echo服務器
---
[TOC]
所有講解網絡通信編程的書籍都會最先講解如何編寫一個Echo服務器,本書也不例外。本章將講解如何快速編寫一個基于Swoole擴展的Echo服務器。
## 服務端
創建一個`Server.php`文件并輸入如下內容:
```php
// Server
class Server
{
private $serv;
public function __construct() {
$this->serv = new swoole_server("0.0.0.0", 9501);
$this->serv->set(array(
'worker_num' => 8,
'daemonize' => false,
));
$this->serv->on('Start', array($this, 'onStart'));
$this->serv->on('Connect', array($this, 'onConnect'));
$this->serv->on('Receive', array($this, 'onReceive'));
$this->serv->on('Close', array($this, 'onClose'));
$this->serv->start();
}
public function onStart( $serv ) {
echo "Start\n";
}
public function onConnect( $serv, $fd, $from_id ) {
$serv->send( $fd, "Hello {$fd}!" );
}
public function onReceive( swoole_server $serv, $fd, $from_id, $data ) {
echo "Get Message From Client {$fd}:{$data}\n";
$serv->send($fd, $data);
}
public function onClose( $serv, $fd, $from_id ) {
echo "Client {$fd} close connection\n";
}
}
// 啟動服務器
$server = new Server();
```
## 客戶端
創建一個`Client.php`文件并輸入如下內容:
```php
<?php
class Client
{
private $client;
public function __construct() {
$this->client = new swoole_client(SWOOLE_SOCK_TCP);
}
public function connect() {
if( !$this->client->connect("127.0.0.1", 9501 , 1) ) {
echo "Error: {$this->client->errMsg}[{$this->client->errCode}]\n";
}
fwrite(STDOUT, "請輸入消息:");
$msg = trim(fgets(STDIN));
$this->client->send( $msg );
$message = $this->client->recv();
echo "Get Message From Server:{$message}\n";
}
}
$client = new Client();
$client->connect();
```
## 運行
在Terminal下執行命令`php Server.php`即可啟動服務器,在另一個Terminal下執行`php Client.php`,輸入要發送的內容,即可發送消息到服務器,并收到來自服務器的消息。
- 序章
- 1 環境搭建
- 1.1 環境搭建
- 1.2 搭建Echo服務器
- 2 初識Swoole
- 2.1 Worker進程
- 2.2 TaskWorker進程
- 2.3 Timer定時器
- 2.4 Process進程
- 2.5 Table內存表
- 2.6 多端口監聽
- 2.7 sendfile文件支持
- 2.8 SSL支持
- 3 Swoole協議
- 3.1 EOF協議
- 3.2 固定包頭協議
- 3.3 Http協議
- 3.4 WebSocket協議
- 3.5 MTQQ協議
- 4 Swoole客戶端
- 4.1 Client
- 4.2 異步Http客戶端
- 4.3 異步WebSocket客戶端
- 4.4 異步MySQL客戶端
- 4.5 異步Redis客戶端
- 5 Swoole異步IO
- 5.1 AsyncIO
- 5.2 EventLoop
- 6 Swoole使用
- 7 框架應用
- 7.1 ZPHP
- 7.2 TSF
- 7.3 Hprose
- 7.4 Dora-rpc
- 8 已有框架支持
- 8.1 Yaf
- 8.2 Phalcon
- 8.3 Thinkphp
- 9 項目實戰
- 附錄*配置選項
- 附錄*回調函數
- 附錄*屬性列表
- 附錄*函數列表