<?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引入的,不想修改这部分代码,免得今后难以升级,所以希望官方能解决类似问题。
这个是火币官方的websocket接口demo吧。
用最新版workerman 3.5.5 试下, https://github.com/walkor/Workerman
这个版本window linux系统都可以用
你好,我切换为workerman 3.5.15版本之后还是不行,ws地址它自动加上了80端口,怎么去掉啊
像题主那样,地址里加上端口443
@1:请问从ws切换到wss需要修改那些地方啊,我现在ws已经可以使用了