zoukankan      html  css  js  c++  java
  • 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 

  • 相关阅读:
    [HDFS Manual] CH6 HDFS Federation
    [HDFS Manual] CH4 HDFS High Availability Using the Quorum Journal Manager
    [HDFS Manual] CH3 HDFS Commands Guide
    [HDFS Manual] CH2 HDFS Users Guide
    [HDFS Manual] CH1 HDFS体系结构
    [20180312]进程管理其中的SQL Server进程占用内存远远大于SQL server内部统计出来的内存
    [MySQL Status] Queries,Questions,read/s区别,Com_Commit和handle_commit
    [MySQL TroubleShooting] 服务启动报错
    [MySQL Code]Innodb 锁分配和锁冲突判断
    [MySQL Reference Manual]17 Group Replication
  • 原文地址:https://www.cnblogs.com/widgetbox/p/7859821.html
Copyright © 2011-2022 走看看