//创建Server对象,监听 127.0.0.1:9501端口
$serv = new Swoole\Server("127.0.0.1", 9501);
$serv->set([
'worker_num' => 8,//worker进程数 cpu 1-4倍
'max_request' => 10000,
'daemonize' => 0
]);
/*监听连接进入事件
* $fd 客户端连接的唯一表示
* $reactor_id 线程id
* */
//监听连接进入事件
$serv->on('Connect', function ($serv, $fd,$reactor_id) {
echo "Client:{$fd} - {$reactor_id} Connect.\n";
});
//监听数据接收事件
$serv->on('Receive', function ($serv, $fd, $reactor_id, $data) {
$serv->send($fd, "Server: {$fd} - {$reactor_id} ".$data);
});
//监听连接关闭事件
$serv->on('Close', function ($serv, $fd) {
echo "Client: Close.\n";
});
//启动服务器
$serv->start();
执行
php tcp.php
成功监听
telnet 127.0.0.1 9501
成功和服务端连接,关掉时出现了问题
再开启文件时 提示端口已经被占用
sudo netstat -an |grep 9501
tcp4 0 0 127.0.0.1.9501 *.* LISTEN
可以查看端口仍然再继续监听 但是查看不到进程id无法关闭
mac上面的netstat命令不好用
lsof -i tcp:9501
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
php 1178 xxx 3u IPv4 0x8b622f8efeee58e3 0t0 TCP localhost:9501 (LISTEN)
kill -9 1178
关掉重新开启可以
客户端代码
<?php
//连接swoole tcp 服务
$client = new swoole_client(SWOOLE_SOCK_TCP);
if (!$client->connect("127.0.0.1",9501)){
echo "连接失败";
exit;
}
//php cli常量
fwite(STDOUT,"请输入消息:");
$msg = trim(fgets("STDIN"));
//发送消息给tcp server服务器
$client->send($msg);
//接受来自server的数据
$result = $client->recv();
echo $result;
执行
xxxx@Mac client % php tcp.php
请输入消息:123
Server: 6 - 6 123%
服务端’worker_num’ => 8,//worker进程数 cpu 1-4倍这里设置每次修改需要重启服务,生产环境及其不现实
cxxxo@Mac client % ps -af | grep tcp.php
501 2025 1844 0 1:56下午 ttys000 0:00.15 php tcp.php
501 2026 2025 0 1:56下午 ttys000 0:00.01 php tcp.php
501 2027 2026 0 1:56下午 ttys000 0:00.00 php tcp.php
501 2028 2026 0 1:56下午 ttys000 0:00.00 php tcp.php
501 2029 2026 0 1:56下午 ttys000 0:00.00 php tcp.php
501 2030 2026 0 1:56下午 ttys000 0:00.00 php tcp.php
501 2031 2026 0 1:56下午 ttys000 0:00.00 php tcp.php
501 2032 2026 0 1:56下午 ttys000 0:00.00 php tcp.php
501 2033 2026 0 1:56下午 ttys000 0:00.00 php tcp.php
501 2034 2026 0 1:56下午 ttys000 0:00.00 php tcp.php
501 2096 2053 0 2:32下午 ttys002 0:00.00 grep tcp.php
使用swoole->reload()方法重载,但是并未成功,后续更新…