use \Workerman\Worker;
use \Workerman\Connection\AsyncTcpConnection;
require_once './Workerman/Autoloader.php';
define('PING_TIMEOUT', 5);
$task = new Worker();
// 進(jìn)程啟動時(shí)異步建立一個(gè)到www.baidu.com連接對象,并發(fā)送數(shù)據(jù)獲取數(shù)據(jù)
$task->onWorkerStart = function($task)
{
$connection_to_baidu = new AsyncTcpConnection('ws://127.0.0.1:8080');
$connection_to_baidu->onWorkerStart = function($connection_to_baidu) {
echo "3333";
};
// 當(dāng)連接建立成功時(shí),發(fā)送http請求數(shù)據(jù)
$connection_to_baidu->onConnect = function($connection_to_baidu)
{
$connection_to_baidu->lastTime = time();
$connection_to_baidu->send("lcjn");//隨便發(fā)點(diǎn)什么吧(觸發(fā))
echo "connect success\n";
};
$connection_to_baidu->onMessage = function($connection_to_baidu, $http_buffer)
{
$connection_to_baidu->lastTime = time();
echo $http_buffer;
};
$connection_to_baidu->onClose = function($connection_to_baidu)
{
echo "connection closed\n";
};
$connection_to_baidu->onError = function($connection_to_baidu, $code, $msg)
{
echo "Error code:$code msg:$msg\n";
};
$connection_to_baidu->connect();
};
// 運(yùn)行worker
Worker::runAll();
比如現(xiàn)在沒開8080端口
1 AsyncTcpConnection 連不上ws,應(yīng)該在onError里面有響應(yīng)事件啊,為什么什么都沒收到
2 如果端口因?yàn)槟承﹩栴}導(dǎo)致接收不到數(shù)據(jù),應(yīng)該怎么重新鏈接這個(gè)ws
1、tcp連接已經(jīng)連上了,只是你發(fā)數(shù)據(jù)不符合websocket協(xié)議的數(shù)據(jù)格式,服務(wù)端無法識別。onError在tcp連接失敗時(shí)會觸發(fā),而你的情況不符合觸發(fā)條件。
注意:服務(wù)端用什么協(xié)議,客戶端就得按照對應(yīng)的協(xié)議格式去發(fā)送數(shù)據(jù),不然二者無法通訊。就像你和老外講中文,老外聽不懂,老外只能接收英文一樣道理
如果你裸tcp傳輸,服務(wù)端請使用tcp,不要用websocket?;蛘吣阌脀s協(xié)議去連websocket服務(wù),new AsyncTcpConnection('ws://xxxxx:xx');這樣
2、客戶端重新new WebSocket去重連
1 服務(wù)端是websocket ,當(dāng)服務(wù)端沒有啟動,8080端口不通,啟動這個(gè)程序(AsyncTcpConnection),這時(shí)候根本連不上ws吧,這時(shí)候會觸發(fā)哪個(gè)事件onError
Press Ctrl-C to quit. Start success.
啟動之后一直是這個(gè)狀態(tài) 什么也沒輸出啊,好像沒走onError