[REDIS] (클라이언트 측) 자바 스크립트와 레디 스에 직접 연결?
REDIS(클라이언트 측) 자바 스크립트와 레디 스에 직접 연결?
직접 클라이언트 측 (하지 Node.js를) 자바 스크립트를 사용하여 레디 스에 연결하는 방법이 있나요?
나는 이미 몇 가지 프로젝트를 성공적으로 Node.js를 + PHP + (클라이언트 용) 레디 스 + Socket.io를 사용하고 있습니다. 가 필요하지 않은 경우 오히려 사용하지 않는 게 좋을 또 다른 서버 인 Node.js를 서버를 복용 - 그러나, 나는 정말이 더 PHP + 레디 스 + 브라우저의 자바 스크립트 같은 것으로 간단하게 할 수 있다고 생각. 간단한 일을 위해, 나는 그것이 더 좋을 것이다 단지 자바 스크립트를 사용하여 레디 스에 직접 연결할 생각합니다.
해당 포트에 요청을 할 수있는 언어가 작동 할 수 있도록 내가 이해에서, 레디 스 그냥 포트를 통해 그 요청을 제공합니다. 이론적으로, 당신은 단지 클라이언트 측 자바 스크립트를 사용하여 레디 스 서버의 포트를 칠 수 없었다?
나는 대부분 또는 가능하지 않을 수 있습니다 발행 / 구독 기능에 관심이 있어요.
당신이 AJAX를 사용하여 비 포트 80 포트에 액세스 할 수 있는지 확실하지 않습니다,하지만 당신은 기술적으로 Nginx에 리버스 프록시 또는 무언가를 사용하여 포트 80 레디 스 '포트를 전달 할 수 있어야한다.
어떤 아이디어? 그냥 생각했다. 나는 나의 현재 솔루션에 매우 만족 해요,하지만 우리가 더 나은 또는 더 효율적으로이 작업을 수행 할 수 있다면 그것은 경이로 다치게하지 않습니다.
해결법
-
==============================
1.당신은, 일부 브라우저에서 WebSocket을을 클라이언트 측 자바 스크립트로 HTTP 요청을 할 수 있습니다. 그러나 Webdis에 보일 것입니다. 그것은 레디 스에 쉽게 HTTP / JSON 레이어를 추가하고 정확하게 당신이 원하는 일을해야한다.
당신은, 일부 브라우저에서 WebSocket을을 클라이언트 측 자바 스크립트로 HTTP 요청을 할 수 있습니다. 그러나 Webdis에 보일 것입니다. 그것은 레디 스에 쉽게 HTTP / JSON 레이어를 추가하고 정확하게 당신이 원하는 일을해야한다.
편집 : 링크 고정.
-
==============================
2.진짜 장애물은 브라우저에서 아약스 요청에 대한 비 포트 80/443 한계를 극복한다; 심지어 Webdis 솔루션, 그것은가 기본으로, t으로 포트 7379 떨어져 실행하고 아파치 또는 Nginx의 프로세스와 충돌 때문에 경우 포트 80 도망.
진짜 장애물은 브라우저에서 아약스 요청에 대한 비 포트 80/443 한계를 극복한다; 심지어 Webdis 솔루션, 그것은가 기본으로, t으로 포트 7379 떨어져 실행하고 아파치 또는 Nginx의 프로세스와 충돌 때문에 경우 포트 80 도망.
내 조언은 webdis 프로세스에 지점으로의 nginx proxy_pass을 사용하는 것입니다. 당신은 포트 80 트래픽을 리디렉션하고 성가신 보안 문제없이 아약스 요청을 수행 할 수 있습니다.
다음은 나를 위해 트릭을 할 것 같다 샘플의 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; } }
프런트 엔드 측면에서, 여기에 모든 키를 얻기의 예입니다. 모든 예를 들어 레디 스 / 요청을 통해 갈 것 레디 스 :
$.ajax({ url: "/redis/KEYS/*", method: 'GET', dataType: 'json', success:function(data) { $each(data.KEYS,function(key,value){ $('body').append(key+"=>"+value+" <br> "); }); } });
또는
당신은 사용할 수 있습니다 :
http://wiki.nginx.org/HttpRedis하고 응답을 직접 구문 분석합니다.
-
==============================
3.내가 직접 레디 스 HTTP 인터페이스 술집 / 서브와 아주 잘 작동 또는 (작성 당시에)를 설정하기가 어렵하지 않는 것으로 나타났습니다.
내가 직접 레디 스 HTTP 인터페이스 술집 / 서브와 아주 잘 작동 또는 (작성 당시에)를 설정하기가 어렵하지 않는 것으로 나타났습니다.
여기에 predis 예에 따라 술집 / 하위 내 "해결 방법"입니다.
http://bradleygoldsmith.tumblr.com/post/35601539836/quick-and-dirty-redis-subscribe-publish-notifications
-
==============================
4.나는 미리 정의 된 레디 스 접근에서 PHP의 무리가 있고, 나는 jQuery로 $ .post 요청을 통해 클라이언트에서 사용할 수있는 '라우터'스타일 기능을 사용하십시오. 라우터는 단지 하나의 큰 스위치입니다 :
나는 미리 정의 된 레디 스 접근에서 PHP의 무리가 있고, 나는 jQuery로 $ .post 요청을 통해 클라이언트에서 사용할 수있는 '라우터'스타일 기능을 사용하십시오. 라우터는 단지 하나의 큰 스위치입니다 :
public function router() { $response = array(); switch ($_POST['method']) { case 'get_whole_list': //is a convenience function with arg $list_key if ($_POST['list_key']) {//which will be provided by the POST request data $response = $this->get_whole_list($_POST['list_key']); break; } else { $response = (array('error' => 'must be passed with post key "list_key"')); break; } //and so on, until //it's time to send the response: return json_encode(array('response' => $response)); }
그리고 당신은 단지) ($ myClass-> 라우터 에코
내가 좋아하는 jQuery를 함께 액세스 :
redgets.get_whole_list = function(key, callback) { $.post(redgets.router, //points to my php file {method: 'get_whole_list', //tells it what to do list_key: key}, //provides the required args function(data) { callback($.parseJSON(data).response); //parses the response });
이 모든 벌금을 작동; 어쩌면 좋지 않은, 그러나 그것은 Node.js를 서버 중복을한다. 나는 아무도 이미이 스타일 범용 레디 스 인터페이스를하지 것을 놀라게하고있다.
from https://stackoverflow.com/questions/6311984/connecting-directly-to-redis-with-client-side-javascript by cc-by-sa and MIT license
'REDIS' 카테고리의 다른 글
[REDIS] 잠금 및 레디 스 (0) | 2020.01.05 |
---|---|
[REDIS] 레일 레디 스 펍 / 하위 (0) | 2020.01.05 |
[REDIS] 레디 스에서 제한 목록 길이 (0) | 2020.01.05 |
[REDIS] 레디 스 바인드 한 개 이상의 IP에 (0) | 2020.01.05 |
[REDIS] 아웃 프로세스의 구현 캐시 윈도우 푸른에 레디 스를 사용하여 (0) | 2020.01.05 |