function uuid()
{
$chars = md5(uniqid(mt_rand(), true));
$uuid = substr ( $chars, 0, 8 ) . '-'
. substr ( $chars, 8, 4 ) . '-'
. substr ( $chars, 12, 4 ) . '-'
. substr ( $chars, 16, 4 ) . '-'
. substr ( $chars, 20, 12 );
return $uuid ;
}
$worker->onWorkerStart = function($worker){
$con = new AsyncTcpConnection('ws://vop.baidu.com/realtime_asr'.'?sn='.uuid());
大家看可以連接這個地址試一下。 我怎么實(shí)驗(yàn)都不行。 baidu接口
眼中程序這個工作 的門檻就這么低么。我即使不會編程 ,鏈接能不能連 都不知道,就來論壇問問題?。。
我通過瀏覽器測試你的代碼也是連不上你發(fā)的地址,報(bào)錯
這個報(bào)錯說明返回的http頭中缺少Sec-WebSocket-Protocol這個字段。說明這個地址不支持websocket,或者更嚴(yán)謹(jǐn)?shù)恼f法,這個地址不支持標(biāo)準(zhǔn)的websocket。
因?yàn)槟愕淖詈?個截圖是后發(fā)的,開始你沒有說明這個地址官方說明文檔,只給了個測試地址及參數(shù)讓大家?guī)蜏y試。所以我根據(jù)報(bào)錯和僅有的地址信息給出了一個簡單的結(jié)論 “這個地址不支持websocket”。如果我之前的結(jié)論造成了你的不滿甚至憤怒,我表示抱歉,這并非我本意。不過這個地址確實(shí)不支持標(biāo)準(zhǔn)的websocket,連基本的瀏覽器都連接失敗。
我用php 其他庫 比如 swoole 的websocket ,和 一些 github websocket 類庫 都能連接。 用python的 標(biāo)準(zhǔn)類庫 也能連接, 因?yàn)?我和 workerman gateway 也打交道 很多年了,也非常感謝 開源的大佬們, 不過這的確也存在一些 兼容性問題。無論如何 還是希望能改進(jìn)吧。
我這里用workerman測試沒有問題。應(yīng)該是你哪里用錯了。
$con = new AsyncTcpConnection('ws://vop.baidu.com/realtime_asr'.'?sn='.uuid());
$con->onWebSocketConnect= function($connection){
echo "onWebSocketConnect\n";
$connection->send('[]');
};
$con->onMessage= function($connection, $data){
var_dump($data);
};
$con->onClose= function($connection){};
$con->onError= function($connection, $code, $msg){};
$con->connect();
輸出 onWebSocketConnect
我測試題示地址完全是OK的,另外Workerman version:3.5.23 、PHP version:7.2.8
大版本和你的基本沒出入,所以不應(yīng)該有這種問題, 參考下看吧;
附連接成功的抓包圖:
沒有什么需要特別設(shè)置的,直接在onWorkerStart寫:
$con = new AsyncTcpConnection('ws://vop.baidu.com/realtime_asr'.'?sn='.uuid());
$con->onConnect= function($connection){
};
$con->onClose= function($connection){
};
$con->onError= function($connection, $code, $msg){
};
$con->connect();
哦,哪一樣的。 不過能否截一個 正常 命令行 運(yùn)行后的 黑窗口圖。 因?yàn)槲野l(fā)的那個運(yùn)行圖, 的確提示 wec-WebSocket-Accept not found