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 客户端代码