為什么創(chuàng)建一個(gè)http服務(wù),向游覽器發(fā)送數(shù)據(jù),打包tcp服務(wù)為http過(guò)程中,為什么我在Http類(lèi),打印任何方法都不能斷點(diǎn)。這里和緩沖有什么關(guān)系嗎?
[attach]1482[/attach]
[attach]1483[/attach]
[attach]1484[/attach]
[attach]1485[/attach]
?
看不到你完整代碼,你第一張圖那段代碼貌似是裸tcp在通信吧,如果是的話那肯定打印不出來(lái),因?yàn)閑ncode那個(gè)方法是websocket應(yīng)用層協(xié)議的封裝實(shí)現(xiàn)。
大佬啥叫裸tcp協(xié)議,我服務(wù)端是這種$tcp_worker = new Worker("websocket://192.168.0.111:2348"); 前臺(tái)是 ws = new WebSocket("ws://192.168.0.111:2348");
1、你用的 new Worker("websocket://192.168.0.111:2348"); 那就是啟動(dòng)是 websocket 服務(wù),你貼這句代碼之前,我是根據(jù)你變量名猜測(cè)的。
2、至于啥是裸tcp協(xié)議啟動(dòng),就是指直接這樣啟動(dòng) new Worker("tcp://192.168.0.111:2348");
1、絕對(duì)可以打印的,我經(jīng)常這樣debug呢,也沒(méi)見(jiàn)你說(shuō)的問(wèn)題啊,肯定是有哪里細(xì)節(jié)沒(méi)注意到。
2、對(duì)于websocket這樣的應(yīng)用層協(xié)議,調(diào)用$connection->send($data, $raw = false)方法, 在 $raw == false的情況下,統(tǒng)統(tǒng)都是要路由到對(duì)應(yīng)應(yīng)用層協(xié)議的 encode()方法的
3、實(shí)在不行,你逐步的老辦法調(diào)試打印。
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、一開(kāi)始就給你說(shuō)了,禁止在代碼里die 或者? exit , 你說(shuō)你第39行代碼那是啥。
2、去掉 die 之后,任意var_dump 一切正常。
public static function encode($content, TcpConnection $connection)
{
var_dump(2222222).PHP_EOL;
// Default http-code.
提個(gè)建議:
1、和 curl 沒(méi)有什么關(guān)系,你啟用了http服務(wù),瀏覽器或者curl 作為不同的客戶(hù)端,都能發(fā)送http請(qǐng)求,測(cè)試一樣樣。
2、我最后能想到的就是你本地是不是開(kāi)啟了 opcache之類(lèi)的加速模塊,如果沒(méi)有那基本可以斷定就是你本地環(huán)境哪里還是有問(wèn)題的,你給的代碼我也幫你跑過(guò)了,沒(méi)有什么問(wèn)題。
3、這個(gè)也真不是什么技術(shù)難題,你不用太過(guò)于糾結(jié)這個(gè)地方,建議你把同樣的代碼部署到另外一臺(tái)機(jī)器泡一下,這也能很好的驗(yàn)證是不是部署環(huán)境的問(wèn)題。
4、無(wú)論怎樣,我都可以非常肯定說(shuō):workerman內(nèi)核里的任何一個(gè)腳本代碼都是可以var_dump調(diào)試的,但是堅(jiān)決禁止 die 或者 exit, 這是多進(jìn)程編程模型的要求,不這么干進(jìn)程就會(huì)退出,就會(huì)出現(xiàn)意想不到的結(jié)果。