swoole_server是异步服务器,所以是通过监听事件的方式来编写程序的。
当对应的事件发生时底层会主动回调指定的PHP函数。如当有新的TCP连接进入时会执行onConnect事件回调,当某个连接向服务器发送数据时会回调onReceive函数。
-
服务器可以同时被成千上万个客户端连接,$fd就是客户端连接的唯一标识符
-
调用 $server->send() 方法向客户端连接发送数据,参数就是$fd客户端标识符
-
调用 $server->close() 方法可以强制关闭某个客户端连接
-
客户端可能会主动断开连接,此时会触发onClose事件回调
创建TCP程序demo文件 :tcp_server.php
<?php
//创建Server对象,监听 127.0.0.1:9501端口
$serv = new swoole_server("127.0.0.1", 9501);
//监听连接进入事件
$serv->on('connect', function ($serv, $fd) {
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.\n";
});
//启动服务器
$serv->start();
执行程序
1.服务端执行 开启tcp服务监听9501端口。netstat -an | grep 9501 查看端口状态Listening
php tcp_server.php
2.客户端连接 9501端口
telnet 127.0.0.1 9501
个人总结:swoole_server是异步服务器,所以只能通过监听事件来触发回调函数。然后在回调中处理业务