websocket 监听10001端口,client 是在本机,往10001端口推送 。
如果不开ssl可以推成功,开启ssl后推不成功。也不报错。请问是什么原因?
ssl证书没问题,wss可以连上websocket
服务端代码如下
$server_set = [
// 'reactor_num' => 2, //reactor thread num
// 'worker_num' => 4, //worker process num
// 'backlog' => 128, //listen backlog
// 'max_request' => 50,
// 'dispatch_mode' => 1,
'log_file' => SOCKET_LOG_FILE,
'daemonize' => 1, //后台运行
];
/** 获取Swoole配置 */
//如果需要 ssl的话 需要添加证书
$server = new \swoole_websocket_server('0.0.0.0', 10001, SWOOLE_PROCESS, SWOOLE_SOCK_TCP | SWOOLE_SSL);//SWOOLE_SSL 需要ssl才加
$server_set['ssl_cert_file'] = SSL_CERT_FILE_PATH;
$server_set['ssl_key_file'] = SSL_KEY_FILE_PATH;
$server->set($server_set);
$server->on('open', function(\swoole_websocket_server $server, $request) {
echo "\r\n客户端{$request->fd}已连接";
});
$server->on('message', function(\swoole_websocket_server $server, $frame) {
var_dump($frame);
});
//监听客户端退出登录状态
$server->on('close', function(\swoole_websocket_server $server, $fd) {
echo "\r\n {$fd}已退出";
});
$server->start();
客户端代码如下
//直接把数据转发到ws处理
$client = new \swoole_http_client('127.0.0.1', 10001, true);
echo "\r\n 返回码";
var_dump($client->statusCode);
$client->on('message', function($client, $frame) {
echo "\r\n 返回值";
var_dump($frame->data);
});
$client->upgrade('/', function($client) use ($data) {
//发送json消息
$res = $client->push($data);
usleep(1000);
$client->close();
});
参考swoole一些衍生框架找到了一些思路,虽然没有解决根本问题,但也算是曲线救国吧。
内部通信不使用ssl,对外连接使用Nginx反向代理解决wss问题。
以下来自EasySwoole官方文档(根据自身情况有略微改动)
重启nginx 如果没有错误 点我打开ws调试工具;
服务地址输入wss://你上面的域名:加端口号(我这里是10001)
点击开启连接 恭喜你 wss成了
参考链接 EasySwoole