swoole tcp client/server-獻給swoole初初初初初初學者們

環境

  • PHP5.6.17
  • Swoole 1.8.8-stable
  • Ubuntu 14.04 (use_namespace 須要開啓命名空間)

學前提要

  • Server 角色並非一成不變的,當 Server 在請求數據時,實際上就是 Client,相對的 Client 在提供數據時,就是 Server
  • 請求數據用 \Swoole\Client,提供數據使用 \Swoole\Server
  • 實例化時參數暫時不予理會,先體驗一把 swoole 再說

啓動一個 TCP Server

$server = new \Swoole\Server('0.0.0.0', 10005, SWOOLE_BASE, SWOOLE_SOCK_TCP);
// 回調函數 connect , 當有新的客戶端鏈接時,會調用此方法
$server->on('connect', function(\Swoole\Server $server, $fd, $fromId){
	echo sprintf("new client %s joined " . PHP_EOL, $fd);
});
// 回調函數 receive, 當接收到客戶端數據時,會調用此方法
$server->on('receive', function(\Swoole\Server $server, $fd, $fromId, $receive){
	$server->send($fd, sprintf("server got message %s from %s ", trim($receive), $fd));
});
// 回調函數 close, 客戶端斷開鏈接時會調用此方法
$server->on('close', function(\Swoole\Server $server, $fd, $fromId){
	echo sprintf("client %s closed" . PHP_EOL, $fd);
});
// 啓動服務器
$server->start();

啓動一個 TCP Client,鏈接 server

$client = new \Swoole\Client(SWOOLE_TCP, SWOOLE_SOCK_ASYNC);
// 鏈接服務器成功會回調此方法
$client->on('connect', function(\Swoole\Client $client) {
	echo sprintf("connect success" . PHP_EOL);
	$content = fopen('php://stdin', 'r');
	echo "Say: ";
	$client->send(fgets(STDIN));
});
// 接收到服務器消息回調此方法 
$client->on('receive', function(\Swoole\Client $client, $receive) {
	echo sprintf("got message: [%s] from server" . PHP_EOL, $receive);
	$content = fopen('php://stdin', 'r');
	echo "Say: ";
	$client->send(fgets(STDIN));
});
// 關閉鏈接時會回調此方法
$client->on('close', function(\Swoole\Client $client) {
	echo sprintf("client close" . PHP_EOL);
});
// 有錯誤時會回調此方法
$client->on('error', function(\Swoole\Client $client) {
	echo sprintf("got error %s" . PHP_EOL, swoole_strerror($client->errCode));
});

$client->connect('0.0.0.0', 10005);

流程

  • 服務端啓動,監聽端口,等待客戶端鏈接
  • 客戶端創建鏈接
  • 發送消息
  • 服務端響應
  • 客戶端關閉鏈接

事實上整個過程遠比上面複雜,但 swoole 都給咱們封裝好了,咱們只須要把業務邏輯寫在相應的回調函數內便可php

相關文章
相關標籤/搜索