• osstatus -9801 workerman websocket 小程序不带端口


    帮事业部的同事,解决问题,坑总结

    小程序出现,osstatus -9801 情况好多,说一下配置环境可解决的方法和问题

    tls 1.2, php 5.6+, nginx, workerman 做的 websocket

    官方没有明确说明,小程序,websocket,不能带端口。。。

    所以使用 workerman 设置后,出现安卓正常,苹果不正常。。。

    明确问题之后,思考解决办法

    因 websocket 使用 https 所以用 443 代理其它端口进行处理

    因 nginx 所以做 proxy 代理

    设置完成后,就可以使用了,不带端口!

    nginx 的配置

    server
    {
            listen 443;
            server_name wss.x.com ;
            index index.html index.htm index.php default.html default.htm default.php;
            root  /wss;
    
            ssl on;
            ssl_certificate   cert/wss/123.pem;
            ssl_certificate_key  cert/wss/123.key;
            ssl_session_timeout 5m;
            ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
            ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
            ssl_prefer_server_ciphers on;
    
            location / {
                    proxy_pass https://127.0.0.1:8282;
                    proxy_http_version 1.1;
                    proxy_set_header Upgrade $http_upgrade;
                    proxy_set_header Connection "Upgrade";
            }
    }

    workerman 的 ssl 配置

    <?php   
    
    use WorkermanWorker;
    use WorkermanWebServer;
    use GatewayWorkerGateway; 
    use GatewayWorkerBusinessWorker;
    use WorkermanAutoloader;
    
    $context = array(
            'ssl' => array(
                    'local_cert' => '/usr/local/nginx/conf/cert/123.pem', // 或者crt文件
                    'local_pk' => '/usr/local/nginx/conf/cert/123.key',
                    'verify_peer' => false
            )
    );
    
    // gateway 进程,这里使用 Websocket
    $gateway = new Gateway("Websocket://0.0.0.0:8282", $context);
    //$gateway = new Gateway("Websocket://0.0.0.0:443", $context);
    // gateway名称,status方便查看
    $gateway->name = 'QiantuGateway';
    // gateway进程数
    $gateway->count = 1;
    // 本机ip,分布式部署时使用内网ip
    $gateway->lanIp = '127.0.0.1';
    // 内部通讯起始端口,假如$gateway->count=4,起始端口为4000
    // 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口 
    $gateway->startPort = 2900;
    // 服务注册地址
    $gateway->registerAddress = '127.0.0.1:1238';
    
    // 开启SSL,websocket+SSL 即wss
    $gateway->transport = 'ssl';
    
    // 心跳间隔
    $gateway->pingInterval = 10;
    // 心跳数据
    $gateway->pingData = '{"type":"ping"}';
    
    // 如果不是在根目录启动,则运行runAll方法
    if (!defined('GLOBAL_START')) {
            Worker::runAll();
    }

    by bin 

  • 相关阅读:
    二,redis常用的数据类型--list
    一,redis常用的数据类型--String
    redis连接超时--Exception in thread "main" redis.clients.jedis.exceptions.JedisConnectionException: Failed connecting to host xxxxx:6379
    Contos 7.5下搭建elasticsearch-7.6.2
    java List中相同的数据合并到一起
    booststrap select2的应用总结
    jquery和bootstrap获取checkbox选中的多行数据
    哈利法克斯(Halifax),布里格斯(Briggs)计算对数的方法-1620年
    Opencv实现频域理想滤波器
    CIELab颜色模型概述
  • 原文地址:https://www.cnblogs.com/widgetbox/p/7859821.html
Copyright © 2020-2023  润新知