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