1、下载GetwayWorker包:下载workerman及相关应用
把解压好的文件放在服务器上(本人放在了项目里)
2、开始之前请先仔细看GetwayWorker手册:序言 · GatewayWorker手册 · 看云
红框圈出来的必看
3、创建wss服务(示例一):
文档地址:创建wss服务 · GatewayWorker手册 · 看云
- 前端链接WebSocket:
// 链接 GetWayWorker var ws = new WebSocket('wss://www.xxxx.cn:8282');
- GatewayWorker\Applications\YourApp\start_gateway.php配置:
$context = array( // 更多ssl选项请参考手册 http://php.net/manual/zh/context.ssl.php 'ssl' => array( // 请使用绝对路径 'local_cert' => '磁盘路径/server.pem', // 也可以是crt文件 'local_pk' => '磁盘路径/server.key', 'verify_peer' => false, // 'allow_self_signed' => true, //如果是自签名证书需要开启此选项 ) ); // gateway 进程,这里使用Text协议,可以用telnet测试 $gateway = new Gateway("Websocket://0.0.0.0:8282",$context); // 设置transport开启ssl,websocket+ssl即wss $gateway->transport = 'ssl';
- 启动GetwayWorker:
以debug(调试)方式启动:php start.php start
以daemon(守护进程)方式启动: php start.php start -d
4、创建wss服务(示例二):
- 前端链接WebSocket:
var ws = new WebSocket('wss://www.xxxx.com/wss'); ws.onopen = function() { alert("连接成功"); };
- GatewayWorker\Applications\YourApp\start_gateway.php配置:
// $gateway = new Gateway("tcp://0.0.0.0:8282"); // tcp改成Websocket $gateway = new Gateway("Websocket://0.0.0.0:8282");
- Nginx配置如下(因为我start_gateway.php 中用的是8282端口,所以下方配置的时候也要是8282端口)别忘记开放8282端口:
server { listen 443 ssl; ssl_session_timeout 5m; ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; location /wss { proxy_pass http://127.0.0.1:8282; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_max_temp_file_size 0; proxy_connect_timeout 90; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; add_header Cache-Control no-cache; add_header X-Cache $upstream_cache_status; } }
- 伪静态配置如下(和上方Nginx配置相同):
- 启动GetwayWorker:
以debug(调试)方式启动:php start.php start
以daemon(守护进程)方式启动: php start.php start -d
报错信息汇总:
- 如前端连接WebSocket时报如下错误:记得修改start_gateway.php文件下 tcp更换为WebSocket
- 启动GetwayWorker时报类似错误:需要在php中取消禁用的函数相关函数:上图取消禁用函数 pcntl_signal_dispatch
- Error during WebSocket handshake: Unexpected response code: 502
没有启动GetwayWorker - Error during WebSocket handshake: Unexpected response code: 200
Nginx配置有问题,或者是前端链接WebSocket时路径有问题,返回看上方的配置是否一样 - Error during WebSocket handshake: Unexpected response code: 404
Nginx配置有问题,网站的伪静态是否配置 - Error in connection establishment: net::ERR_CONNECTION_REFUSED
没有启动GetwayWorker - 关于停止失败,手册里面列举了几种可能性:停止失败 · workerman手册 · 看云