2013-05-10 5 views
7

Apache에서 Nginx를 리버스 프록시로 사용하여 정적 리소스를 제공하는 PHP 앱을 만들고 실행했습니다.Redis를 사용하여 PHP와 socket.io/node.js 간의 통신

각 사용자 활동 스트림에 대한 활동 ID를 저장하기 위해 사용하는 Redis도 설치되어 있습니다. 활동이 MySQL 데이터베이스에 기록되면 Redis는 활동 ID를 각 사용자 스트림으로 푸시합니다. 사용자가 자신의 활동 스트림을 받으면 앱은 먼저 Redis에서 활동 ID의 사용자 목록을 검색 한 다음 MySQL IN() 쿼리를 통해 실제 활동 데이터를 가져옵니다.

이 모든 것이 잘 작동하지만이 설정에 실시간 기능을 추가하려고합니다. 이러한 이벤트를 사용자 브라우저로 직접 전달하고 일반적인 실시간 알림을 추가하고 싶습니다.

이렇게하려면 node.js를 socket.io와 함께 설치해야합니다. socket.io 서버가 올바르게 실행되고 클라이언트가 페이지로드시 자동으로 연결됩니다.

내가 고심하고있는 곳은 내 PHP 응용 프로그램 내에서 socket.io에 메시지를 게시하는 방법을 이해하는 것입니다. PHP와 node.js는 직접 통신 할 수 없기 때문에 Redis를 이미 설치하고 실행 한 이후로 내가 최선의 방법으로 Redis를 활용하는 것이 가장 좋습니다. 그러나 나는 이것에 대해 어떻게 생각하는지 모른다.

내가 필요한 것은 PHP에서 Redis로 알림을 보내고 socket.io에 관련 클라이언트에 푸시하기 위해 프로세스를 설명하는 것입니다 (모든 코드 예제는 매우 유용합니다).

또한 socket.io가 어떤 클라이언트에게 보낼지를 어떻게 알 수 있는지 이해할 수 없습니다. 이 정보를 어떻게 전달하고 모든 정보가 동기화되도록 유지합니까? 이것도 필요한가요? Redis에서 PHP 세션을 저장하고 사용자가 연결할 때 socket.io에 데이터를 수집해야합니까? 아니면 다른 방법이 있습니까?

미리 감사드립니다.

참고 : 내 PHP 세션 데이터가 현재 디스크에 저장되어 있습니다.

+0

방법 레디 스에 pubsub 채널을 가진하고 Node.js를 공정에서 가입에 대해. 그러면 PHP가 pubsub에 게시하여 노드와 통신합니다. 다른 클라이언트에 대해 별도의 pubsub 채널을 가질 수 있으며 특정 클라이언트에 도달하는 데 필요한 채널에 게시 할 수 있습니다. – akonsu

+0

@akonsu 이것은 정확히 내가 감사를 끝내는 것입니다. 그러나 나는 단지 하나의 pubsub 채널을 설정하고 socket.io로 가져 오기 위해 모든 것을 게시합니다. 거기에 내가 어떤 특정 클라이언트에 가서 등 작업해야 ... 나는 연결된 클라이언트에 대해 별도의 pubsub 채널을 정의하는 것이 더 좋을까요? 또한 당신이 이것을 더 자세히 쓰고 싶다면 나는 그것을 정확하게 표시 할 것이다. :) – gordyr

+0

솔직히 각 사용자에 대해 별도의 채널을 만드는 방법에 대해 알지 못합니다.사용자 수에 따라 다릅니다. 그것은 확장되지 않을 수도 있습니다. 그러나 나는 여러 채널을 가질 가능성을 명심해야 할 것입니다. 사용자 기반이 커지면 언젠가는 여러 관련 redis 인스턴스를 보유하고 채널을 공유 할 수 있습니다. – akonsu

답변

1

Redis에서 pubsub 채널을 설정할 수 있습니다 (http://redis.io/topics/pubsub 참조). 그런 다음 node.js 프로세스에서 등록하십시오. 그러면 PHP가 pubsub에 게시하여 노드와 통신합니다. 서로 다른 클라이언트에 대해 별도의 pubsub 채널을 가질 수 있으며 특정 클라이언트에 도달하는 데 필요한 채널에 게시 할 수 있습니다.

+2

소스 링크를 첨부하여 명확하게 ... – tong

+0

감사합니다. 링크가 추가되었습니다. – akonsu

0

Redis는 inbuilt websocket이나 http 서버를 제공하지 않으므로 채널 데이터를 스트리밍하기 위해 php 또는 node.js와 통합해야합니다. Tweak 메서드를 사용하면 Redis 서버를 Redis 용 predis php 라이브러리를 사용하여 연결할 수 있습니다. php는 Redis로 데이터를 보내고 socket.io는 Redis 서버에 푸시 된 새 메시지를 추적하여 실제 연결된 사용자에게 다시 보냅니다. 시각.

https://github.com/u-day/tweak/