服务端代码是这么写的
<?php
include __DIR__ . '/workerman/Autoloader.php';
use Workerman\Worker;
// 这里设置的是websocket协议(端口任意,但是需要保证没被其它程序占用)
$worker = new Worker('websocket://0.0.0.0:1010');
// 设置transport开启ssl,websocket+ssl即wss
//$worker->transport = 'ssl';
$worker->onMessage = function($connection, $data)
{
$connection->send("hello");
};
Worker::runAll();
下面是 nginx的配置文件
server {
listen 80;
server_name xxxxxxxxxxxxxx;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
listen 443 ssl;
server_name xxxxxxxxxxxxxx;
index index.html index.htm index.php;
ssl on;
ssl_certificate /data/home/server/nginx-1.7/conf/ssl/xxxxxxxxxxxxxx/xxxxxxxxxxxxxx.pem;
ssl_certificate_key /data/home/server/nginx-1.7/conf/ssl/xxxxxxxxxxxxxx/xxxxxxxxxxxxxx.key;
ssl_session_timeout 5m;
ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:50m;
ssl_prefer_server_ciphers on;
location / {
root /data/home/www/xxxxxxxxxxxxxx/public;
index index.php index.html index.htm;
# Nginx环境配置,隐藏ThinkPHP public index.php入口
#try_files $uri $uri/ /index.php?s=$uri&$args;
try_files $uri $uri/ /index.php?s=$args;
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php?s=/$1 last;
break;
}
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location /wss
{
proxy_pass http://127.0.0.1:8686;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_redirect off;
}
location ~ \.php { #去掉$
root /data/home/www/xxxxxxxxxxxxxx/public;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$; #增加这一句
fastcgi_param PATH_INFO $fastcgi_path_info; #增加这一句
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# include /alidata/server/nginx/conf/rewrite/phpmyadmin.conf;
#access_log /alidata/log/nginx/access/phpmyadmin.log;
}
这个启动完的显示
----------------------- WORKERMAN -----------------------------
Workerman version:3.5.14 PHP version:7.0.0
------------------------ WORKERS -------------------------------
proto user worker listen processes status
tcp root none websocket://127.0.0.1:8686 4
----------------------------------------------------------------
Press Ctrl+C to stop. Start success.
网页代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv = "X-UA-Compatible" content = "IE=edge,chrome=1" />
<title>撒的发撒的发</title>
</head>
<body class="gray-bg">
<script language="javascript">
ws = new WebSocket("wss://xxxxxxxxxx/wss");
ws.onopen = function() {
alert("连接成功");
ws.send('tom');
alert("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
alert("收到服务端的消息:" + e.data);
};
ws.onerror = function(e) {
console.log(e);
};
</script>
</body>
</html>
一直连接超时504
WebSocket connection to 'wss://xxxxxxx/wss' failed: Error during WebSocket handshake: Unexpected response code: 504
浏览器抛出的是这个错误提示,我排查了一下有可能是通讯协议的问题,但是我实在是不知道怎么改
上面写错的端口号也调整成一致了,并没有什么卵用
按照手册把nginx多余的配置去掉试下,没问题了再把nginx一点一点加回来看下是哪里问题
大神我用的是 nginx1.7版本 跟手册一样的配置是报404的,然后我就 加 了server_name 之后变成504错误 脑壳疼
大神我现在在社区里面找配置文件照着改,然而一直是301 502 504 这三个直接徘徊
我现在的有一些疑问就是 这个对nginx的版本有要求吗,然后还有就是支持跨域吗,
根据手册,nginx 版本不能小于1.3
那我满足了 我的版本是1.7的 其次跨域的那个现在不用考虑 最后各种姿势的配置文件我也尝试过了但就是gg 各种504 是我脸黑吗 还是我姿势不对=.=
把你现在的配置贴出来
好的 稍等
发出来了
workerman 的
php start.php status 贴下
在底下了
这个是后端的代码
客户端连接代码发下,我测试下,不要隐藏域名
底下了
看下你的服务器
server {
listen 443 ssl;
server_name xxxxxx.com;
xxxxxx.com是什么
还有看下是不是用了cdn
好像是的,用了cdn 中间隔了个服务器
我朋友给我解析的 打开直接就是https 应该是用了cdn
感谢大神,真的是用了cdn, 等解析生效了我在试试 三克油
虽然被cdn卡了一天,但是解决了 很美滋滋 谢谢大神
不客气
多谢多谢,我这边也碰到类似的问题,我的域名解析也用了cdn,请问你是怎么解决的?
我也是这个问题,老哥,求解决方案啊。
老哥,求解决方案