我创建tcp后 里面循环发送某些指令, 想顺便send返回一些进度条的信息给前段, 但是我发现是统一返回的, 是闭包结束后统一send 的吗, 或者是有什么解决办法?
感觉 $con->close() 不能for放循环里吧,第一次循环就close了,那下次循环send就没有意义了,发不出去了
$con->close()
哦哦 我把close 放出去, 但是 $connection->send 也是循环完后 统一发的....
测试下来 好像跟闭包又没有关系, 我单独循环 $connection->send 也是统一发出来10条,,,并不是我延迟4秒一次...
业务代码和workerman内核是运行在同一个进程的。如果workerman内核得不到运行控制权,就无法完成握手、发送数据这些操作。所以不要用运行sleep,使用定时器来代替sleep。正确的代码类似这样
<?php require 'vendor/autoload.php'; use Workerman\Worker; use Workerman\Timer; $worker = new Worker('websocket://127.0.0.1:8000'); $worker->onWebSocketConnect = function($con){ for ($i=1; $i<=5; $i++) { Timer::add($i, function()use($con){ $con->send('1'); }, null, false); } }; Worker::runAll();
ok 我去实验下~
那我在创建异步的 $con->onConnect = function($con)use(){} 闭包内循环 $con->send() 我为什么感觉只能发送第一条? for(){ $con->send(str)} $con->close();这样的
不要靠感觉,发了多少可以抓包看。
我在tcp异步的闭包 循环 for(){ $con->send(str)} $con->close();一条也发不出去, for(){ $con->send(str);$con->close();}这样反而可以发出去一条.....有方法解决吗
需要抓包看,数据是否发送出去,连接是否断开了,哪一端断开的。先确定哪一端问题,再解决。
咋抓tcp 的 我的是 socket的服务 创建tcp异步 tcp的连接是别人机器的ip+端口, 只抓我socket端口的吗
我的是个 win的服务器...tcpdump没有这个...
百度windows 抓包
昨天我那个 把发送socekt跟异步tcp的 放进定时器 都可以循环发出了, 这种方案可行吗? 或者又什么更好的建议?
可行
感觉
$con->close()
不能for放循环里吧,第一次循环就close了,那下次循环send就没有意义了,发不出去了哦哦 我把close 放出去, 但是 $connection->send 也是循环完后 统一发的....
测试下来 好像跟闭包又没有关系, 我单独循环 $connection->send 也是统一发出来10条,,,并不是我延迟4秒一次...
业务代码和workerman内核是运行在同一个进程的。如果workerman内核得不到运行控制权,就无法完成握手、发送数据这些操作。所以不要用运行sleep,使用定时器来代替sleep。正确的代码类似这样
ok 我去实验下~
那我在创建异步的 $con->onConnect = function($con)use(){} 闭包内循环 $con->send() 我为什么感觉只能发送第一条? for(){ $con->send(str)} $con->close();这样的
不要靠感觉,发了多少可以抓包看。
我在tcp异步的闭包 循环 for(){ $con->send(str)} $con->close();一条也发不出去, for(){ $con->send(str);$con->close();}这样反而可以发出去一条.....有方法解决吗
需要抓包看,数据是否发送出去,连接是否断开了,哪一端断开的。先确定哪一端问题,再解决。
咋抓tcp 的 我的是 socket的服务 创建tcp异步 tcp的连接是别人机器的ip+端口, 只抓我socket端口的吗
我的是个 win的服务器...tcpdump没有这个...
百度windows 抓包
昨天我那个 把发送socekt跟异步tcp的 放进定时器 都可以循环发出了, 这种方案可行吗? 或者又什么更好的建议?
可行