Mic*_*kus 19 javascript php mysql linux redis
有没有办法使用客户端(而不是Node.js)javascript直接连接到Redis?
我已经成功地为一些项目使用Node.js + PHP + Redis + Socket.io(对于客户端).但是,我真的认为这可以进一步简化为PHP + Redis + Browser javascript - 取出Node.js服务器,这是另一台服务器,如果没有必要,我宁愿不使用.对于简单的事情,我认为使用Javascript直接连接到Redis会更好.
根据我的理解,Redis只是通过端口提供请求,因此任何可以向该端口发出请求的语言都可以使用.理论上,你不能只使用客户端javascript命中redis服务器的端口吗?
我最感兴趣的是发布/订阅功能,这可能是也可能是不可能的.
我不确定您是否可以使用AJAX访问非端口80端口,但从技术上讲,您应该能够使用Nginx反向代理或其他东西将Redis的端口转发到端口80.
有任何想法吗?只是一个想法.我对目前的解决方案非常满意,但想知道我们是否可以更好或更有效地做到这一点并没有什么坏处.
小智 7
真正的障碍是克服浏览器中ajax请求的非端口80/443限制; 即使使用Webdis解决方案,因为它通过默认运行端口7379,并且如果从端口80运行则会与您的Apache或Nginx进程冲突.
我的建议是使用nginx proxy_pass指向webdis进程.您可以将流量重定向到端口80并执行ajax请求,而不会出现恼人的安全问题.
下面是一个示例NGINX配置,似乎对我有用.
upstream WebdisServerPool
{
server 127.0.0.1:7379; #webdis server1
server 192.168.1.1:7379; #webdis server 2
}
server {
listen 80; #
root /path/to/my/php/code/;
index index.php;
server_name yourServerName.com;
location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ {
expires max;
log_not_found off;
}
location / {
# Check if a file exists, or route it to index.php.
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME /path/to/my/php/code/$fastcgi_script_name;
}
location /redis {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
rewrite /(.*)/(.*)/(.*)$ /$2/$3 break; #ignore the /redis
proxy_redirect off;
proxy_pass http://webdisServerPool;
}
}
Run Code Online (Sandbox Code Playgroud)
在前端,这是获取所有键的示例.例如,所有redis请求都将通过/ redis:
$.ajax({
url: "/redis/KEYS/*",
method: 'GET',
dataType: 'json',
success:function(data)
{
$each(data.KEYS,function(key,value){
$('body').append(key+"=>"+value+" <br> ");
});
}
});
Run Code Online (Sandbox Code Playgroud)
要么
你可以使用:
http://wiki.nginx.org/HttpRedis 并自己解析响应.