2013-05-20 3 views
0

현재 온라인 상태의 모든 사용자의 이름을 알 필요가있는 클라이언트 용 웹 응용 프로그램을 개발 중입니다. 전체 응용 프로그램은 프런트 엔드 전달에 사용되는 jQuery를 사용하여 PHP로 작성됩니다. 그러나 사용자를 지속적으로 모니터링 할 수있는 독립적 인 Node.js 서버를 설치할 수 있음을 발견했습니다.온라인 사용자보기 - node.js vs php + mysql

원본 디자인을 사용하면 업데이트 확인을 위해 모든 페이지 상단에 쿼리 스크립트가 포함되어 있습니다. 나는 $ .post()를 사용하는 js로 PHP PHP 페이지에서 응답을 얻기 위해 업그레이드했다.

내가 알아야 할 것은 매번 표준 mysql 액세스 대신 node.js를 사용하면 성능에 미치는 영향이 무엇일까요 ?? 심지어 가능할까요? 응용 프로그램은 온라인으로 500 명에서 1000 명 사이의 어느 곳에서나 온라인으로 실행되므로 내 클라이언트가 성능에 중점을 둡니다.

또한 이러한 솔루션을 사용할 수 있다면 구현 방법에 대한 도움은 매우 환영 할 것입니다.

답변

1

Node.js를 사용하면 성능이 크게 향상 될 수 있습니다. 온라인 사용자 목록은 Node.js의 메모리에 쉽게 보관할 수 있으며 데이터베이스를 전혀 공격 할 필요가 없습니다.

사용자 목록 요청이 들어 오면 요청한 사용자를 사용자 목록 데이터 구조에 추가 한 다음 목록을 반환 할 수 있습니다. 각 사용자에 대해 마지막으로 액세스 한 시간을 유지하십시오. setInterval으로 주기적으로 (1 초에 1 회) 기능을 실행하여 목록을 반복하고 잠시 후에 목록을 요청하지 않은 사용자를 제거하십시오.

목록은 Node.js 프로세스의 메모리에 보관되므로 데이터베이스 액세스가없고 요청이 매우 빠르게 처리됩니다.

+0

내가 생각한 것 : D. 조언 해 주셔서 고맙습니다. 정말 그것에 대해 혼란 스러웠습니다. 답변을 쓰지 않는다면 한 가지 더 질문하십시오. 고객의 호스트가 cPanel과 함께 램프를 사용합니다. node.js 응용 프로그램을 실행할 것입니까? – Hanut

+0

쉘 액세스 권한을 가진 한 Node를 사용할 수 있습니다. 셸 액세스는 가능하지만 루트 액세스는 얻을 수 없다면 8080과 같이 1024 이상의 포트에서 Node를 실행해야합니다.하지만 포트 80 대신 포트 8080에서 실행하는 것이 좋을 것입니다. 그러나 호스트에 방화벽이 설정된 다른 포트가있을 수 있습니다. 그래서 그것은 정말로 달려 있습니다. 또한 Heroku 또는 다른 호스트에서 실행하고 교차 도메인 아약스 호출에 CORS를 사용할 수 있습니다. – Daniel

+0

음 CORS가 무엇인지 전혀 알지 못합니다. 게다가 나는 어떻게 내 php에서 node.js 서버로 사용자 정보를 얻는 지 궁금해한다. 나는 [Elephand.io] (https://github.com/wisembly/elephant.io)를 올려다 보았으나 그것이 내가하려고하는 것을 만족시킬 지 확신 할 수 없다. – Hanut

1

시스템에 따라 다르므로 제공하기가 어려운 번호를 묻는 경우, 웹에서 node.js 벤치 마크를 확인하면 node.js가 PHP 나 다른 웹 기술보다 성능이 월등히 뛰어나다는 것을 알 수 있습니다.
socket.io 모듈을 사용하는 것이 좋습니다 (해당 사이트에서 http://socket.io/ 예제를 찾을 수 있습니다).
호스팅 지원 웹 소켓 인 경우 socket.io는 놀라운 성능을 제공합니다. node.js 개발자 대부분이 mongodb와 같은 nosql을 사용하므로 mySql의 성능에 대해서는 잘 모릅니다.

+0

나는 Daneil이 제안한 바를 생각해 보았습니다. 필요한 데이터의 크기가 너무 작기 때문에 쿼리를 실행하면 내 책에는 아무런 의미가 없습니다. 나는 심지어 옵션으로 자바 서버를 찾고 있었다. 그러나 의심 할 여지없이, node.js가가는 길일 것 같습니다. 건배와 socket.io 언급 주셔서 감사합니다, 나는 당신의 대답을 보았다 전에 그것을 조사했다. :) – Hanut

+0

Daniel의 솔루션은 실제로 매우 훌륭하게 보입니다. –