使用AsyncTcpConnection作为websocket客户端时出现报错


<?php
require_once 'vendor/autoload.php';

use Workerman\Worker;
use Workerman\Connection\AsyncTcpConnection;

$worker = new Worker();
$worker->onWorkerStart = function($worker) {
// ssl需要访问443端口
$con = new AsyncTcpConnection('ws://api.xxxx.com:443/ws');

// 设置以ssl加密方式访问,使之成为wss
$con->transport = 'ssl';

$con->onConnect = function($con) {
echo 'Connected';
};

$con->onMessage = function($con, $data) {

};

$con->connect();
};

Worker::runAll();


出现了两处警告:
Warning: stream_socket_client(): Failed to enable crypto in D:\Visual-NMP-x64\www\WebSocket-API-demos-master\WebSocket_PHP-demo\workerman\Connection\AsyncTcpConnection.php on line 178
以及
Warning: stream_socket_client(): unable to connect to ssl://api.xxxx.com:443 (Unknown error) in D:\Visual-NMP-x64\www\WebSocket-API-demos-master\WebSocket_PHP-demo\workerman\Connection\AsyncTcpConnection
.php on line 178

首先是无法连接;
其次,最初websocket的地址是wss://api.xxxx.com/ws,在AsyncTcpConnection的connect方法中,$this->_remoteURI没有被拼接上去。
我改了这个部分的代码,但是错误依然存在。但是单独使用stream_socket_client接口测试时,是可以正常连接的,区别就在于我只传了一个参数,而AsyncTcpConnection中传了很多:
$this->_socket = stream_socket_client("{$this->transport}://{$this->_remoteHost}:{$this->_remotePort}{$this->_remoteURI}", $errno, $errstr, 0, STREAM_CLIENT_ASYNC_CONNECT);

因为workerman是composer引入的,不想修改这部分代码,免得今后难以升级,所以希望官方能解决类似问题。
已邀请:

walkor

赞同来自: yukai

这个是火币官方的websocket接口demo吧。

用最新版workerman 3.5.5 试下, https://github.com/walkor/Workerman
这个版本window linux系统都可以用

yukai

赞同来自:

你好,我切换为workerman 3.5.15版本之后还是不行,ws地址它自动加上了80端口,怎么去掉啊
 

要回复问题请先登录注册