AsyncTcpConnection连不上tcp的响应事件

mazhaozi
use \Workerman\Worker;
use \Workerman\Connection\AsyncTcpConnection;
require_once './Workerman/Autoloader.php';
define('PING_TIMEOUT', 5);

$task = new Worker();
// 进程启动时异步建立一个到www.baidu.com连接对象,并发送数据获取数据
$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";
    };

    // 当连接建立成功时,发送http请求数据
    $connection_to_baidu->onConnect = function($connection_to_baidu)
    {
        $connection_to_baidu->lastTime = time();
        $connection_to_baidu->send("lcjn");//随便发点什么吧(触发)
        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();
};

// 运行worker
Worker::runAll();

比如现在没开8080端口
1 AsyncTcpConnection 连不上ws,应该在onError里面有响应事件啊,为什么什么都没收到
2 如果端口因为某些问题导致接收不到数据,应该怎么重新链接这个ws

4084 4 0
4个回答

walkor

1、tcp连接已经连上了,只是你发数据不符合websocket协议的数据格式,服务端无法识别。onError在tcp连接失败时会触发,而你的情况不符合触发条件。
注意:服务端用什么协议,客户端就得按照对应的协议格式去发送数据,不然二者无法通讯。就像你和老外讲中文,老外听不懂,老外只能接收英文一样道理
如果你裸tcp传输,服务端请使用tcp,不要用websocket。或者你用ws协议去连websocket服务,new AsyncTcpConnection('ws://xxxxx:xx');这样

2、客户端重新new WebSocket去重连

  • mazhaozi 2016-07-15

    1 服务端是websocket ,当服务端没有启动,8080端口不通,启动这个程序(AsyncTcpConnection),这时候根本连不上ws吧,这时候会触发哪个事件onError

  • walkor 2016-07-15

  • mazhaozi 2016-07-15

    ----------------------- WORKERMAN -----------------------------
    Workerman version:3.3.2 PHP version:5.3.28
    ------------------------ WORKERS -------------------------------
    worker listen processes status
    none none 1 [OK]

    Press Ctrl-C to quit. Start success.

    启动之后一直是这个状态 什么也没输出啊,好像没走onError

  • walkor 2016-07-15

    你确认你的8080端口没监听么?你可以telnet你的8080端口试下

  • mazhaozi 2016-07-15

    @1:我用的是windows版 下面是我截图 老大

  • mazhaozi 2016-07-15

    @1:2客户端重新new WebSocket去重连 这个代码怎么去写 能提示下么

  • walkor 2016-07-15

    workerman-chat里面客户端有重连的逻辑,也就是在onClose的时候重新new WebSocket

mazhaozi

[attach]346[/attach]
确实不通
也没有执行onError

  • 暂无评论
walkor

好的,我看下

  • 暂无评论
walkor

已经修复,请更新windows版本workerman。
linux版本没问题,不受影响。

  • mazhaozi 2016-07-16

    好的

  • kute1654 2017-02-27

    你好,我是这个月下的windows版本的workerman,为什么还出现上面的问题

  • weitch 2017-02-27

    @1772:我也是啊,发现有这个问题了,我是直接下zip的,难道要下git版的吗

  • walkor 2017-02-28

    3.3.5 - 3.3.9版本不小心把这个问题还原了,重新下载一份就好了,现在已经修复,修复后的版本名3.3.90

  • kute1654 2017-02-28

    @1:下载新的版本就可以了,辛苦啦,老大。

年代过于久远,无法发表回答
🔝