1、能做什么
异步多线程服务器和客户端
异步mysql、redis、数据库连接池、任务队列
http/websocket服务器/客户端
异步文件独写
支持协程
2、环境要求
php5.4以上
centos7
3、关于tcp服务器
4、关于UDP服务器
packet接收发送数据到客户端的数据
5、关于调试工具【网络调试助手】
6、代码示例
tcp
//创建服务器
$host='0.0.0.0';
$port=9501;
$ws = new swoole_server($host,$port);
/**
* host :监听的ip
* port: 端口号 1024以下的端口号需要root权限
*/
//使用
// bool $swoole_server->on($envent,$callback);
/**
* connect :当建立链接的时候 $server:服务器信息,$fd 客户端信息
* receive :当接收到数据的时候 $server:服务器信息,$fd:客户端信息。$from_id:id ,$data:数据
* closer :关闭连接
*/
$ws->on('connect',function($server,$fd){
echo "建立连接";
});
$ws->on('receive',function($server,$fd,$from_id,$data){
var_dump($data);
echo "接收到数据\n";
});
$ws->on('close',function($server,$fd){
echo "关闭连接";
});
$ws->start();//启动服务
UDP
$serv=new swoole_server('0.0.0.0',9502,SWOOLE_PROCESS,SWOOLE_SOCK_UDP);
/**\
* $server:服务器信息
* $data:接收到的数据
* $fd:客户端信息
*/
$serv->on('packet',function($server,$data,$fd){
//发送到数据到客户端
$server->sendto($fd['address'],$fd['port'],"server:$data");
var_dump($fd);
});
$serv->start();//启动服务
web服务器
<?php
$serv= new swoole_http_server("0.0.0.0",9501);
/**
* 获取请求
* //request 请求信息
* response 返回信息
**
**/
$serv->on("request",function ($request,$response){
$response->header("Content-Type","text/html:charset=utf-8");
$html = file_get_contents("./index.html");
$response->end($html);
});
$serv->start();
websocket服务器
<?php
//创建websocket服务器
$serv= new swoole_websocket_server("0.0.0.0",9502);
//on
//open 建立连接 $ws 服务器 $request :客户端信息
$serv->on("open",function ($ws,$request){
var_dump($request);
$ws->push($request->fd,"welcom\n");
});
//message 发送消息
$serv->on("message",function ($ws,$request){
echo "message:$request->data";
$ws->push($request->fd."get it message");
});
//close 关闭连接
$serv->on("close",function ($ws,$request){
echo "close\n";
});
$serv->start();