记住用户名密码
代码备份录 —— workman-gateway 支持 ssl 遇到的问题,以及解决方式
支持ssl 协议,使得小程序能使用
测试服:公网IP 55.55.55.55 内网IP:192.168.1.1 【通过nginx实现】 通过官方指导配置,在gateway内配置ssl相关内容 负载均衡(服务器A和B已通过阿里云slb 做了负载均衡,并已监听443端口) 服务器A :公网IP 66.66.66.61 内网IP:192.168.0.1 服务器B :公网IP 99.99.99.91 内网IP:192.168.0.2
内容来自:start_gateway.php 文件部分内容 // 证书最好是申请的证书 $context = array( // 更多ssl选项请参考手册 http://php.net/manual/zh/context.ssl.php 'ssl' => array( // 请使用绝对路径 'local_cert' => 'ssl/*****.pem', // 也可以是crt文件 'local_pk' => 'ssl/*****.key', 'verify_peer' => false, // 'allow_self_signed' => true, //如果是自签名证书需要开启此选项 ) ); // 原先是这里监听了7373端口,此处注释掉,改为443端口 //$gateway = new Gateway("Websocket://0.0.0.0:7373"); // websocket协议(端口任意,只要没有被其它程序占用就行) $gateway = new Gateway("websocket://0.0.0.0:443", $context); // 开启SSL,websocket+SSL 即wss $gateway->transport = 'ssl'; ****其他不变****
1、启动gateway 监听websocket 端口 7373 2、nginx 配置反向代理,转到7373端口 【域名都是测试服的域名,证书一致】 核心nginx配置 map $http_upgrade $connection_upgrade { default upgrade; '' close; } upstream websocket { server 66.66.66.61:7373; #当前服务器的IP } server { **** #SSL-END location /wss { proxy_pass http://66.66.66.61:7373;#当前服务器的IP proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; } }
添加记录 1、domain.com ==正常解析到第一台ip==> 66.66.66.61 2、申请 domain.com => ssl 拿到证书
代码说明 2、new wss协议 启动ws链接 onopen {"type":"init","client_id":"c0a8a0cc090800000007"} 收到workman返回的client_id,准备绑定laravel 开始绑定client_id 绑定成功 [Array(1)] <script type="text/javascript"> var ws; var client_id ; function connect() { // 此处的domain.com 是指向register的那台服务器(上方服务器有记录) ws = new WebSocket("wss://domain.com"); ws.onopen = onopen; ws.onmessage = onmessage; ws.onclose = function() { console.log("连接关闭,定时重连"); connect(); }; ws.onerror = function() { console.log("出现错误"); }; } function onmessage(e) { console.log("服务端推送",e.data); var data = JSON.parse(e.data); client_id = data['client_id']; switch(data['type']){ // 绑定 client_id case 'init': // 客户端ID绑定 console.log("收到workman返回的client_id,准备绑定laravel"); loginInit(data); break; // 服务端 ping 客户端 case 'ping': ws.send('{"type":"ping"}'); break; } } function loginInit(data) { $.ajax({ url:"api/wss/bindUid", type: "post", data:{ id:"business", type:"business", client_id:data['client_id'] }, cache:false, dataType: "json", beforeSend:function(XMLHttpRequest){ console.log("开始绑定client_id"); }, success:function(pay){ console.log("绑定成功",pay); }, error: function (XMLHttpRequest,ex) { } }); } function onopen() { } setTimeout(function () { console.log("启动ws连接"); connect(); },1000); </script>
nginx 反向代理到websocket端口,也是用的http
目前有 0 条留言 其中:访客:0 条, 博主:0 条