我下載了GatewayWorker,本地win7正常啟動(dòng),但一模一樣的文件,上傳到服務(wù)器后,啟動(dòng)報(bào)錯(cuò),請(qǐng)求協(xié)助!
報(bào)錯(cuò)代碼如下,8282端口就是開來(lái)給這個(gè)測(cè)試用的。
[root@ryzs ~]# php /www/ridd/GatewayWorker/start.php start -d
Workerman[/www/ridd/GatewayWorker/start.php] start in DAEMON mode
[root@ryzs ~]# stream_socket_server(): unable to connect to tcp://0.0.0.0:8282 (Address already in use) in file /www/ridd/GatewayWorker/vendor/workerman/workerman/Worker.php on line 2233
PHP Fatal error: Uncaught exception 'Exception' with message 'Address already in use' in /www/ridd/GatewayWorker/vendor/workerman/workerman/Worker.php:2235
Stack trace:
thrown in /www/ridd/GatewayWorker/vendor/workerman/workerman/Worker.php on line 2235
Fatal error: Uncaught exception 'Exception' with message 'Address already in use' in /www/ridd/GatewayWorker/vendor/workerman/workerman/Worker.php:2235
Stack trace:
thrown in /www/ridd/GatewayWorker/vendor/workerman/workerman/Worker.php on line 2235
^C
[root@ryzs ~]# php /www/ridd/GatewayWorker/start.php stop
Workerman[/www/ridd/GatewayWorker/start.php] stop
Workerman[/www/ridd/GatewayWorker/start.php] not run
[root@ryzs ~]#
8282端口被占用了
可是我沒(méi)有誰(shuí)占用,我這個(gè)端口就是開來(lái)測(cè)試這個(gè)的,因?yàn)轱L(fēng)站是https,唯一提到這個(gè)的地方就是服務(wù)器的配置里,可那就是為這個(gè)服務(wù)用的。
listen 8282;
server_name 域名;
ssl on;
ssl_certificate 證書地址;
ssl_certificate_key 證書地址;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass 訪問(wèn)端口;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
# WebSocket 請(qǐng)求
location /websocketChat {
proxy_pass 訪問(wèn)端口;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# WebSocket 請(qǐng)求
location /websocketAudio {
proxy_pass 訪問(wèn)端口;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
因?yàn)榫W(wǎng)站是開啟了https的,如果不加這個(gè),訪問(wèn)頁(yè)面又會(huì)報(bào)錯(cuò),說(shuō)是試圖訪問(wèn)一個(gè)不安全的地址被攔截。
listen 8282;
server_name 域名;
ssl on;
ssl_certificate 證書地址;
ssl_certificate_key 證書地址;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
proxy_pass 訪問(wèn)端口;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
}
# WebSocket 請(qǐng)求
location /websocketChat {
proxy_pass 訪問(wèn)端口;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# WebSocket 請(qǐng)求
location /websocketAudio {
proxy_pass 訪問(wèn)端口;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
如果我在start_gateway.php里改端口,比如8283,服務(wù)是能啟動(dòng)了,但因?yàn)閣ss的問(wèn)題,又會(huì)攔截。
開啟之后,即便用cmd telnet也無(wú)法訪問(wèn),回車后什么反應(yīng)沒(méi)有,再敲就出現(xiàn)下面的信息。
HTTP/1.1 200 Websocket
Server: workerman/3.5.29
<div style="text-align:center"><h1>Websocket</h1><hr>powered by <a href="https:/
/wtbis.cn">workerman 3.5.29</a></div>
C:\Users\Administrator>
現(xiàn)在是這樣的,nginx配置里,得偵聽(tīng)8282端口,如果不加上,所有指向這個(gè)端口的請(qǐng)求則會(huì)被認(rèn)為是不安全的請(qǐng)求被拒絕,如果加上了,start.php又無(wú)法啟動(dòng),說(shuō)端口被占用。怎樣才能正常使用,請(qǐng)懂的人教我做一下,付酬勞也行.
nginx 使用了8282端口,其它程序就不能使用8282端口了,gatewayWorker也不能,所以報(bào)錯(cuò)Address already in use
。
你這個(gè)應(yīng)該是用nginx 的8282端口將請(qǐng)求轉(zhuǎn)發(fā)給gatewayWorker,也就是nginx根據(jù) 8282端口根據(jù)請(qǐng)求的路徑將請(qǐng)求分發(fā)到不同的實(shí)際端口。并不是讓GatewayWorker也監(jiān)聽(tīng)8282。
listen 8282;
server_name 域名;
ssl on;
ssl_certificate 證書地址;
ssl_certificate_key 證書地址;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# WebSocket 請(qǐng)求
location /websocketChat {
proxy_pass http://某ip:8283;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
比如這個(gè)配置是說(shuō)當(dāng)nginx發(fā)現(xiàn)8282端口的請(qǐng)求的路徑是/websocketChat
時(shí)(例如wss://example.com:8282/websocketChat) ,nginx會(huì)把這個(gè)請(qǐng)求轉(zhuǎn)發(fā)給后端的某ip
的8283
端口。
比如你要用/websocketChat
這個(gè)路徑來(lái)訪問(wèn)你的gatewayWorker,那你就讓gatewayWorker在某ip
對(duì)應(yīng)的服務(wù)器上監(jiān)聽(tīng)8283并啟動(dòng)。
啟動(dòng)完畢后客戶端連接8282端口時(shí)必須帶上/websocketChat
才能訪問(wèn)你的gatewayWorker。例如
// 正確用法
var ws = new WebSocket('wss://example.com:8282/websocketChat');
// 錯(cuò)誤用法
var ws = new WebSocket('wss://example.com:8282');
另外telnet無(wú)法訪問(wèn)websocket協(xié)議,客戶端和服務(wù)端要想能通訊,協(xié)議必須一致或者兼容,telnet協(xié)議和websocket協(xié)議明顯是不同的協(xié)議。就像你用telnet訪問(wèn)mysql 3306端口一樣,也是無(wú)法通訊。