我本地配置的ssl沒有問題
<?php
use Workerman\Connection\AsyncTcpConnection;
use Workerman\Timer;
use Workerman\Worker;
require_once("./vendor/autoload.php");
$worker = new Worker();
$worker->count = 1;
$worker->onWorkerStart = function ($worker) {
// 設(shè)置訪問對(duì)方主機(jī)的本地ip及端口以及ssl證書
$context_option = array(
'socket' => array(
// ip必須是本機(jī)網(wǎng)卡ip,并且能訪問對(duì)方主機(jī),否則無效
'bindto' => '192.168.0.39',
),
// ssl選項(xiàng),參考https://php.net/manual/zh/context.ssl.php
'ssl' => array(
// 本地證書路徑。 必須是 PEM 格式,并且包含本地的證書及私鑰。
'local_cert' => './mkcert+4.pem',
// local_cert 文件的密碼。
'passphrase' => './mkcert+4-key.pem',
// 是否允許自簽名證書。
'allow_self_signed' => true,
// 是否需要驗(yàn)證 SSL 證書。
'verify_peer' => false
)
);
$con = new AsyncTcpConnection('ws://socket.idcd.com:1443', $context_option);
$con->onConnect = function (AsyncTcpConnection $con) {
// //定時(shí)給服務(wù)端推送數(shù)據(jù)
Timer::add(2, function () use ($con) {
$time = date("Y-m-d H:i:s ");
$con->send('my time is ' . $time);
});
};
// 設(shè)置以ssl加密方式訪問
$con->transport = 'ssl';
$con->onMessage = function (AsyncTcpConnection $con, $data) {
echo($data . "------hello----" . PHP_EOL);
};
$con->onClose = function (AsyncTcpConnection $con) {
// 如果連接斷開,則在1秒后重連
$con->reConnect(1);
};
$con->onError = function ($con, $code, $msg) {
echo "Error code:$code msg:$msg\n";
};
$con->connect();
};
Worker::runAll();
但是運(yùn)行上面的代碼,workman會(huì)提示 SSL handshake error: stream_socket_enable_crypto(): Unable to set private key file 我也發(fā)現(xiàn)了,有好幾個(gè)遇到我類似的問題,但是沒有解答
搞不懂,這個(gè)有啥疑問么?
ws://echo.websocket.org:443 改成 ws://socket.idcd.com:1443 唄
但是 我改成 wss://socket.idcd.com:1443 就直接報(bào)錯(cuò)了。class \Protocols\Wss not exist
方便不,要不麻煩幫忙寫一個(gè)實(shí)例唄。測(cè)試url是:https://www.idcd.com/tool/socket 這里面有測(cè)試wss的地址呢
http://www.wtbis.cn/doc/workerman/faq/as-wss-client.html
直接用手冊(cè)里的例子2,改下域名就行了啊,搞不懂為什么簡(jiǎn)單的事情搞不定