swoole 网络通信引擎

tcp服务器(wiki.swoole.com)

  • 程序代码 tcp server
//创建sever对象 监听9501的端口
$serv = new swoole_server("127.0.0.1",9501);
$serv->set([
  'worker_num'=>8,//work 进程数  cpu 1-4
  'max_request' => 10000,
]);
//监听链接进入事件  $fd是客户端连接的唯一标识 reactor_id线程id
$serv->on('connect',function($serv,$fd,$reactor_id){
    echo "client:connect.\n";
});
//监听数据接收事件
$serv->on('receive',function($serv,$fd,$from_id,$data){
  $serv->send($fd,'server:'.$data);
});
//监听链接关闭事件
$serv->on('close',function($serv,$fd){
  echo "client close";
});
//启动服务器
serv->start();
  • 执行程序
php server.php  
telnet 127.0.0.1 9501
hello
server : hello 

【无法连接到服务器的问题检测】

  • netstat -an | grep 9501 查看端口状态。
  • 检查防火墙问题
  • 注意服务器使用的是ip地址。如果127.0.0.1回环地址 客服端只能用127.0.0.1才能连上

tcp客户端

//连接swoole tcp服务
$server_client = new swoole_client(SWOOLE_SOCK_TCP);
if(!$server_client ->connect("127.0.0.1",9501)){
echo '连接失败';
exit;
}
fwrite(STDOUT,'please input ');
$msg = trim(fgets(STDIN));
//发送数据给服务器
if(!$server_client->send($msg)){
echo "发送失败";
exit;
}
//接收server返回的数据
$result = $client->recv();
echo $result;

http服务器

  • 程序代码 udp server
//swoole_http_server 继承 swoole_server
$http = new swoole_http_server('0.0.0.0',9502,);//0.0.0.0代表内网地址 外网地址 或者127.0.01所有地址
//显示静态资源(如果找到html文件之后 将不会往下面执行。直接把html显示出来)
$http->set(array(
    'enable_static_handler'=>true,
    'document_root' => './/////html' 
  ));
$http->on('request',function($request,$reponse){
     $response->header("Content-Type", "text/html; charset=utf-8");
    $response->end("

Hello Swoole. #".rand(1000, 9999)."

"); /** end操作后将向客户端浏览器发送HTML内容 end只能调用一次,如果需要分多次向客户端发送数据,请使用write方法 客户端开启了KeepAlive,连接将会保持,服务器会等待下一次请求 客户端未开启KeepAlive,服务器将会切断 **/ $http->start(); });

websocket服务器

websocket协议是基于tcp的一种新的网络协议 他实现了浏览器与服务器全双工的通信。

  • 程序代码
$socket = new swoole_websocket_server('127.0.0.1',9501);
//监听WebSocket连接打开事件
$socket ->on('open',function($socket ,$request){
    $socket ->push($request->fd,'hello scoket');
});
//监听WebSocket消息事件
$ws->on('message', function ($socket , $frame) {
    echo "Message: {$frame->data}\n";
    $ws->push($frame->fd, "server: {$frame->data}");//大小不得超过2m
});
//监听WebSocket连接关闭事件
$ws->on('close', function ($socket , $fd) {
    echo "client-{$fd} is closed\n";
});
$socket ->start();

websocket 客户端代码


你可能感兴趣的:(swoole 网络通信引擎)