<?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');
// 設(shè)置以ssl加密方式訪問,使之成為wss
$con->transport = 'ssl';
$con->onConnect = function($con) {
echo 'Connected';
};
$con->onMessage = function($con, $data) {
};
$con->connect();
};
Worker::runAll();
出現(xiàn)了兩處警告:
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
沒有被拼接上去。
我改了這個(gè)部分的代碼,但是錯誤依然存在。但是單獨(dú)使用stream_socket_client
接口測試時(shí),是可以正常連接的,區(qū)別就在于我只傳了一個(gè)參數(shù),而AsyncTcpConnection
中傳了很多:
$this->_socket = stream_socket_client("{$this->transport}://{$this->_remoteHost}:{$this->_remotePort}{$this->_remoteURI}", $errno, $errstr, 0, STREAM_CLIENT_ASYNC_CONNECT);
因?yàn)閣orkerman是composer引入的,不想修改這部分代碼,免得今后難以升級,所以希望官方能解決類似問題。
這個(gè)是火幣官方的websocket接口demo吧。
用最新版workerman 3.5.5 試下, https://github.com/walkor/Workerman
這個(gè)版本window linux系統(tǒng)都可以用