2012-03-16 14 views
4

웹 소켓을 사용하여 PHP 소켓 서버에 연결하기를 원합니다. 이 서버는 데이터베이스에서 변경된 사항이 있으면 일정한 간격으로 검사해야하며 변경 사항을 클라이언트에 다시 보내야합니다. 따라서 클라이언트가 연결되면 클라이언트 (이 경우 웹 브라우저)가 페이지에있을 때 연결이 열려 있어야합니다.PHP 서버와 웹 소켓

그런 다음 서버는 특정 간격으로 데이터베이스를 확인하고 필요할 때 데이터를 보내야합니다. 나는 문제가 websockets (모든 주요 브라우저가 아직 지원하지 않는 것을 제외하고는)가 아니라는 것을 알고있다. 주로 내 관심사는 PHP입니다. 나는 PHP로 서버를 만들고 싶지만, 내가 원하는대로 계속해서 PHP 코드에 대한 연결을 열어 둘 수 있습니까?

간격은 어떨까요? 일반적으로 C# .NET exe 응용 프로그램에서는 타이머 만 만들 것입니다. 어떻게 이것이 PHP에서 할 수 있 었는가 ??

이것이 가능한 경우 Apache 웹 서버에서 PHP 코드를 실행할 수 있습니까?

+0

websocket은 다른 프로토콜이므로 아무 것도 아파치를 통해 실행할 수 없습니다. 분명히 https://github.com/disconnect/apache-websocket이 있습니다. – miki

답변

5

일반적으로 PHP로 소켓 서버를 작성하려면 명령 줄을 통해 실행하고 싶을 것입니다. 다음과 같은 사항을 고려해야합니다.

일반적으로 공유 서버가 아닌 소켓에 액세스해야하므로 VPS를 직접 가져야합니다.

서버를 재부팅 할 때마다 자동으로 PHP 스크립트를 시작하는 파일을 서버에 설치하려고합니다. 일반적으로 이것은 /etc/init.d에 PHP 스크립트를 실행하는 쉘 스크립트를 놓은 다음 /etc/rc5.d (기본 레벨이라고 가정 함)에 쉘 스크립트에 대한 심볼릭 링크를 배치하여 수행됩니다.

또한이 서버를 파일 서버로 사용할 계획이 아니라면 Apache를 실행하고 싶지는 않을 것입니다. 소켓 서버용으로 만 사용하는 경우 PHP-CLI를 설치하려고합니다. 그러면 메모리가 절약됩니다.

서버에 연결된 사용자간에 실시간 상호 작용을 시도하는 경우 데이터베이스를 포함하지 않을 수도 있습니다. 소켓 서버에는 소켓 서버에 연결된 모든 가입자 목록이 있으므로 그 중 하나가 메시지를 보내면 느린 데이터베이스에 아무 것도 저장하지 않고 연결된 모든 가입자에게 해당 메시지를 즉시 보낼 수 있습니다. 또는 감당할 수있는 경우 정보를 메모리에 보관하고 싶을 수도 있습니다.

socket.io라고하는 모든 브라우저에서 지원되지 않는 소켓 용 솔루션이 있습니다. 기본적으로 지원되는 경우 브라우저 websocket을 설정하려고 시도하지만 지원되지 않으면 플래시 소켓 연결이 시작됩니다. 어쨌든 동일한 인터페이스를 사용하여 상호 작용할 수 있습니다.

소켓 서버를 만들기위한 다른 언어를 고려할 수도 있습니다. PHP는 실제로 이런 유형의 것을 위해 만들어지지 않았습니다. 더 나은 언어는 자바 스크립트, 특히 확장성에 관심이있는 경우에 사용됩니다. Node.js는 소켓 서버를 아주 쉽게 만들 수있는 라이브러리이며, 훨씬 더 확장 성이 좋습니다.

+0

내 경우에는 데이터베이스가 필요합니다. 데이터베이스에 모든 것을 저장하는 것이 아니라 일부 설정 만 저장합니다. 한 사용자가 설정을 변경하면 다른 사용자에게 가능한 한 빨리 알려야합니다. 그래서 nodejs가 DB를 필요로 할 때 나를위한 옵션이라고 생각하지 않습니다. 하지만 명령 행에서 PHP 서버를 실행하면 나에게 충분할 것 같다. 지금 바로 살펴 보겠습니다. – w00

+0

node.js에는 MySql 및 Drizzle 용 드라이버가있는 데이터베이스 액세스가 내장되어 있습니다. 다른 사용자에게 즉시 통보해야한다면 왜 데이터베이스에 저장해야합니까? 한 사용자가 메시지를 보내 자마자 다른 사용자에게 정보를 보내지 않는 것이 좋습니다.소켓 서버는 웹 스크립트가 아닙니다. 모든 연결된 사용자가 항상 사용하고있는 스크립트 인스턴스가 하나 있습니다. 즉, 사용자가 변수 내부에서 데이터를 공유하고, 서로 다른 메시지를 즉시 릴레이 할 수 있습니다. – dqhendricks

+0

http://nodejsdb.org/ – dqhendricks