$worker->onConnect = function($connection){
$connection->onMessage = function( $connection ){
$host = "xxx.xxx.xxx.xxx:xxx";
$bw = "POST / HTTP/1.1
Host:$host
Connection:keep-alive
Content-Type:application/json;charset=UTF-8
Content-Length:0
";
$http_connect = new AsyncTcpConnection("tcp://$host");
$http_connect->onConnect = function( $connection ) use ( $bw ){
echo "握手成功";
$connection->send( $bw );
};
$http_connect->onMessage = function( $http_connection , $response ) use ( $connection ){
var_dump( $response );
$http_connection->close();
$connection->send( $response );
$connection->close();
};
$http_connect->connect();
return ;
};
};
簡略代碼如上
環(huán)境 windows 10,php8 , 命令行 php server.php 啟動
可以獲取到服務(wù)端的信息,但是馬上就顯示
@@@child exit@@@
Worker process terminated
然后 主程序關(guān)閉
日志 也只顯示
pid:1 Worker process terminated
有試過 try catch 在不同 閉包下 捕獲,沒有任何異常
本人使用學(xué)習(xí) workerman 僅三周 ,歡迎指正
剛看完TI10, 回來補充下 開發(fā)的想法,我發(fā)現(xiàn)自己彎沒轉(zhuǎn)過來,既然 workerman 的 http請求 我自己做不好,那我就用老辦法 curl 或 fsockopen啊,明天試試
看看是不是哪里執(zhí)行exit die 了,我這測試沒出現(xiàn)啥錯誤。下面是測試代碼和結(jié)果
<?php
require_once __DIR__ . '/vendor/autoload.php';
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
$worker = new Worker('http://0.0.0.0:12345');
$worker->onConnect = function($connection){
$connection->onMessage = function( $connection ){
$host = "baidu.com";
$bw = "POST / HTTP/1.1
Host:$host
Connection:keep-alive
Content-Type:application/json;charset=UTF-8
Content-Length:0
";
$http_connect = new AsyncTcpConnection("tcp://$host");
$http_connect->onConnect = function( $connection ) use ( $bw ){
echo "握手成功";
$connection->send( $bw );
};
$http_connect->onMessage = function( $http_connection , $response ) use ( $connection ){
var_dump( $response );
$http_connection->close();
$connection->send( $response );
$connection->close();
};
$http_connect->connect();
return ;
};
};
Worker::runAll();
測試結(jié)果。
在 喵了個咪 的幫助下,經(jīng)過驗證,就是因為我加入了 evnet擴展 導(dǎo)致的
總結(jié)來說
windows10 , php8 加 event擴展(版本號為 3.0.6和3.0.5)這個前提下
導(dǎo)致 用 AsyncTcpConnection 對象 tcp模擬http請求之后 程序會退出