为什么创建一个http服务,向游览器发送数据,打包tcp服务为http过程中,为什么我在Http类,打印任何方法都不能断点。这里和缓冲有什么关系吗?
肯定可以var_dump之类的打印,但是绝对不要 die 或 exit 断点调试.
没有die,但是就是打印不出来,换了ws也不行,
加了调试代码后,重启服务了吗?
@614:重启了呢
[attach]1482[/attach]
[attach]1483[/attach]
[attach]1484[/attach]
[attach]1485[/attach]
看不到你完整代码,你第一张图那段代码貌似是裸tcp在通信吧,如果是的话那肯定打印不出来,因为encode那个方法是websocket应用层协议的封装实现。
大佬啥叫裸tcp协议,我服务端是这种$tcp_worker = new Worker("websocket://192.168.0.111:2348"); 前台是 ws = new WebSocket("ws://192.168.0.111:2348");
@614:郁闷了,怎么试都不行
@614:开的是虚拟机
1、你用的 new Worker("websocket://192.168.0.111:2348"); 那就是启动是 websocket 服务,你贴这句代码之前,我是根据你变量名猜测的。 2、至于啥是裸tcp协议启动,就是指直接这样启动 new Worker("tcp://192.168.0.111:2348");
1、绝对可以打印的,我经常这样debug呢,也没见你说的问题啊,肯定是有哪里细节没注意到。 2、对于websocket这样的应用层协议,调用$connection->send($data, $raw = false)方法, 在 $raw == false的情况下,统统都是要路由到对应应用层协议的 encode()方法的 3、实在不行,你逐步的老办法调试打印。
@614:大佬是不是自动加载问题,我还是不行,方法都进不去
@614:真的好奇怪
[attach]1492[/attach]
[attach]1491[/attach]
[attach]1493[/attach]
还不好使吗?方便的话,你保留调试代码然后整体打个包,我运行下看~~
@614:我传了
11
37 public static function input($recv_buffer, TcpConnection $connection) 38 { 39 var_dump(4234);die; 40 if (!strpos($recv_buffer, "\r\n\r\n")) { 41 // Judge whether the package length exceeds the limit. 42 if (strlen($recv_buffer) >= $connection->maxPackageSize) { 43 $connection->close(); 44 return 0; 45 } 46 return 0; 47 }
1、一开始就给你说了,禁止在代码里die 或者 exit , 你说你第39行代码那是啥。 2、去掉 die 之后,任意var_dump 一切正常。
额,可我去掉encode方法里面还是没有数据啊?
public static function encode($content, TcpConnection $connection) {
var_dump(2222222).PHP_EOL; // Default http-code.
你咋玩的啊? 我拿你的代码跑的,去掉那个die后,一点问题都没有。
@614:我想用命令行打出上面那个字符,用curl获取游览器请求都进步到encode方法里面
提个建议: 1、和 curl 没有什么关系,你启用了http服务,浏览器或者curl 作为不同的客户端,都能发送http请求,测试一样样。 2、我最后能想到的就是你本地是不是开启了 opcache之类的加速模块,如果没有那基本可以断定就是你本地环境哪里还是有问题的,你给的代码我也帮你跑过了,没有什么问题。 3、这个也真不是什么技术难题,你不用太过于纠结这个地方,建议你把同样的代码部署到另外一台机器泡一下,这也能很好的验证是不是部署环境的问题。 4、无论怎样,我都可以非常肯定说:workerman内核里的任何一个脚本代码都是可以var_dump调试的,但是坚决禁止 die 或者 exit, 这是多进程编程模型的要求,不这么干进程就会退出,就会出现意想不到的结果。
肯定可以var_dump之类的打印,但是绝对不要 die 或 exit 断点调试.
没有die,但是就是打印不出来,换了ws也不行,
加了调试代码后,重启服务了吗?
@614:重启了呢
[attach]1482[/attach]
[attach]1483[/attach]
[attach]1484[/attach]
[attach]1485[/attach]
看不到你完整代码,你第一张图那段代码貌似是裸tcp在通信吧,如果是的话那肯定打印不出来,因为encode那个方法是websocket应用层协议的封装实现。
大佬啥叫裸tcp协议,我服务端是这种$tcp_worker = new Worker("websocket://192.168.0.111:2348"); 前台是 ws = new WebSocket("ws://192.168.0.111:2348");
@614:郁闷了,怎么试都不行
@614:开的是虚拟机
1、你用的 new Worker("websocket://192.168.0.111:2348"); 那就是启动是 websocket 服务,你贴这句代码之前,我是根据你变量名猜测的。
2、至于啥是裸tcp协议启动,就是指直接这样启动 new Worker("tcp://192.168.0.111:2348");
1、绝对可以打印的,我经常这样debug呢,也没见你说的问题啊,肯定是有哪里细节没注意到。
2、对于websocket这样的应用层协议,调用$connection->send($data, $raw = false)方法, 在 $raw == false的情况下,统统都是要路由到对应应用层协议的 encode()方法的
3、实在不行,你逐步的老办法调试打印。
@614:大佬是不是自动加载问题,我还是不行,方法都进不去
@614:真的好奇怪
[attach]1492[/attach]
[attach]1491[/attach]
[attach]1493[/attach]
还不好使吗?方便的话,你保留调试代码然后整体打个包,我运行下看~~
@614:我传了
11
1、一开始就给你说了,禁止在代码里die 或者 exit , 你说你第39行代码那是啥。
2、去掉 die 之后,任意var_dump 一切正常。
额,可我去掉encode方法里面还是没有数据啊?
public static function encode($content, TcpConnection $connection)
{
你咋玩的啊? 我拿你的代码跑的,去掉那个die后,一点问题都没有。
@614:我想用命令行打出上面那个字符,用curl获取游览器请求都进步到encode方法里面
提个建议:
1、和 curl 没有什么关系,你启用了http服务,浏览器或者curl 作为不同的客户端,都能发送http请求,测试一样样。
2、我最后能想到的就是你本地是不是开启了 opcache之类的加速模块,如果没有那基本可以断定就是你本地环境哪里还是有问题的,你给的代码我也帮你跑过了,没有什么问题。
3、这个也真不是什么技术难题,你不用太过于纠结这个地方,建议你把同样的代码部署到另外一台机器泡一下,这也能很好的验证是不是部署环境的问题。
4、无论怎样,我都可以非常肯定说:workerman内核里的任何一个脚本代码都是可以var_dump调试的,但是坚决禁止 die 或者 exit, 这是多进程编程模型的要求,不这么干进程就会退出,就会出现意想不到的结果。