我下載了GatewayWorker,本地win7正常啟動,但一模一樣的文件,上傳到服務(wù)器后,啟動報錯,請求協(xié)助!
報錯代碼如下,8282端口就是開來給這個測試用的。
[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端口被占用了
可是我沒有誰占用,我這個端口就是開來測試這個的,因?yàn)轱L(fēng)站是https,唯一提到這個的地方就是服務(wù)器的配置里,可那就是為這個服務(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 訪問端口;
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 請求
location /websocketChat {
proxy_pass 訪問端口;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# WebSocket 請求
location /websocketAudio {
proxy_pass 訪問端口;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
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 訪問端口;
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 請求
location /websocketChat {
proxy_pass 訪問端口;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# WebSocket 請求
location /websocketAudio {
proxy_pass 訪問端口;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
開啟之后,即便用cmd telnet也無法訪問,回車后什么反應(yīng)沒有,再敲就出現(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:/
/m.wtbis.cn">workerman 3.5.29</a></div>
C:\Users\Administrator>
現(xiàn)在是這樣的,nginx配置里,得偵聽8282端口,如果不加上,所有指向這個端口的請求則會被認(rèn)為是不安全的請求被拒絕,如果加上了,start.php又無法啟動,說端口被占用。怎樣才能正常使用,請懂的人教我做一下,付酬勞也行.
nginx 使用了8282端口,其它程序就不能使用8282端口了,gatewayWorker也不能,所以報錯Address already in use
。
你這個應(yīng)該是用nginx 的8282端口將請求轉(zhuǎn)發(fā)給gatewayWorker,也就是nginx根據(jù) 8282端口根據(jù)請求的路徑將請求分發(fā)到不同的實(shí)際端口。并不是讓GatewayWorker也監(jiān)聽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 請求
location /websocketChat {
proxy_pass http://某ip:8283;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
比如這個配置是說當(dāng)nginx發(fā)現(xiàn)8282端口的請求的路徑是/websocketChat
時(例如wss://example.com:8282/websocketChat) ,nginx會把這個請求轉(zhuǎn)發(fā)給后端的某ip
的8283
端口。
比如你要用/websocketChat
這個路徑來訪問你的gatewayWorker,那你就讓gatewayWorker在某ip
對應(yīng)的服務(wù)器上監(jiān)聽8283并啟動。
啟動完畢后客戶端連接8282端口時必須帶上/websocketChat
才能訪問你的gatewayWorker。例如
// 正確用法
var ws = new WebSocket('wss://example.com:8282/websocketChat');
// 錯誤用法
var ws = new WebSocket('wss://example.com:8282');
另外telnet無法訪問websocket協(xié)議,客戶端和服務(wù)端要想能通訊,協(xié)議必須一致或者兼容,telnet協(xié)議和websocket協(xié)議明顯是不同的協(xié)議。就像你用telnet訪問mysql 3306端口一樣,也是無法通訊。