ws客戶端
AsyncTcpConnection斷線,在onClose時(shí)候,通過$connection->reConnect(1),on connect觸發(fā): Sec-WebSocket-Accept not found。
目前糟糕的解決方案是:onClose時(shí)候,reload -g 重啟進(jìn)程。
期待更好的解答。
use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;
require_once __DIR__ . '/Workerman/Autoloader.php';
$worker = new Worker();
// 進(jìn)程啟動(dòng)時(shí)
$worker->onWorkerStart = function()
{
// 以websocket協(xié)議連接遠(yuǎn)程websocket服務(wù)器
$ws_connection = new AsyncTcpConnection("ws://echo.websocket.org:80");
// 連上后發(fā)送hello字符串
$ws_connection->onConnect = function($connection){
for($i=0;$i<100;$i++) {
$connection->send('hello');
}
};
// 遠(yuǎn)程websocket服務(wù)器發(fā)來消息時(shí)
$ws_connection->onMessage = function($connection, $data){
echo "recv: $data\n";
};
// 連接上發(fā)生錯(cuò)誤時(shí),一般是連接遠(yuǎn)程websocket服務(wù)器失敗錯(cuò)誤
$ws_connection->onError = function($connection, $code, $msg){
echo "error: $msg\n";
};
// 當(dāng)連接遠(yuǎn)程websocket服務(wù)器的連接斷開時(shí)
$ws_connection->onClose = function($connection){
echo "connection closed\n";
$connection->reConnect(1); //**_首次實(shí)例化connect無問題,重連觸發(fā)==Sec-WebSocket-Accept not found.**_
};
// 設(shè)置好以上各種回調(diào)后,執(zhí)行連接操作
$ws_connection->connect();
};
Worker::runAll();
onConnect 的時(shí)候,WebSocket 握手尚未完成,不要在這里發(fā)送數(shù)據(jù)。應(yīng)用層的通信應(yīng)該在 onWebSocketConnect 之后才能開始。
把workerman作為Websocket客戶端,AsyncTcpConnection可以讓W(xué)orkerman作為客戶端向遠(yuǎn)程服務(wù)端發(fā)起異步連接,并通過send接口和onMessage回調(diào)異步發(fā)送和處理連接上的數(shù)據(jù)。針對(duì)您所說的,對(duì)比官方示例http://doc3.workerman.net/worker-development/__construct.html;然后自測(cè)了一下,問題還是存在。
測(cè)試了下這個(gè)腳本,沒發(fā)現(xiàn)所說的Sec-WebSocket-Accept not found問題
更新的腳本出現(xiàn)很多未定義變量,腳本請(qǐng)先自行測(cè)試下能否重現(xiàn)你的問題再貼出來吧,這樣大家都節(jié)省時(shí)間,也是對(duì)其它想幫助你的人的一種尊重。