2009-11-05 4 views
2

안녕하세요, 개발자 여러분!소켓을 통한 PHP 플래시 통신

나는 네트워크 프로그래밍 전문가가 아니지만 플래시 멀티 플레이어 브라우저 게임 (위치, 팀 전투와 같은 표준 기능)을 위해 PHP로 소켓 서버를 개발할 필요성에 직면했다. , 등).


주된 문제점은 TCP가 지점 간 프로토콜이며 주어진 포트를 완전히 차지한다는 점입니다.

물론 소켓에 대한 연결을 관리하는 일종의 대기열을 만들 수도 있지만이 솔루션은 적정하지 않은 것 같습니다.

"공정한"포트 (예 : 2000에서 2200)의 간격을 사용하는 것이 한 가지 요청이 실행하는 데 많은 시간이 걸릴 수 있고 플레이어가 기다리지 않기 때문에 대기열에 있습니다.

하지만이 "포트 통합"전략을 어떻게 구현할 수 있습니까? 내가 볼 솔루션은 다음과 같습니다

  • 모든 포트 당 PHP 스크립트를 launcing (HE-그는, 시작 스크립트의 2 백!)

  • 어떻게 든 새 프로세스 (2 백 개가 처리 되었습니까? 좋지 않음)로, 모든 포트에 하나씩 포워딩됩니다.

  • 추가 포트 - 모든 포트를 수신 대기 (매우 나쁨).
  • 스레딩이나 그와 유사한 것을 사용합니다 (문제는 PHP가 단일 스레드라는 것인데, 내가 아는 바로는 pcntl?).

그러나 어떻게 든 나는 그 중 하나를 좋아하지 않거나 적어도 가능한 최상의 방법으로 구현하는 방법을 모릅니다.

지연없이 시간 단위로 여러 사용자의 여러 요청을 처리하고 PHP에서이 전략을 구현하는 가장 좋은 기존 전략은 무엇입니까? 우리는 우리 자신의 데비안 서버를 가지고 있으므로 필요한 PHP 확장을 사용할 수 있습니다.

이러한 종류의 시스템의 개발, 계획 및 구현에 대한 조언은 높이 평가됩니다.

감사합니다!


편집 1 : 그런데 는, 나는 몇 가지 추가 세부 사항을 언급하는 것을 잊어 버렸습니다.

예를 들어, 채팅 응용 프로그램을 개발하려는 경우 각 사용자마다 고정 된 (영구적 인) 연결이 필요합니다. 예를 들어 80 명의 사용자가 채팅에 참여했으며 그 중 하나가 메시지를 게시했습니다.이 서버는 처리하고 다른 모든 연결된 사용자에게 보내려고 시도하며 기록 파일이나 그와 유사한 항목에 항목을 추가합니다.

이 상황에서 각 사용자 80 명당 10 초마다 새 메시지를 폴링하는 서버가 열광하므로 영구 연결의 필요성이 분명해진다. 그러나 모든 요청이 instanlty로 처리되는 것은 아니라는 점을 감안할 때, 이와 같은 것을 구현하는 가장 좋은 방법은 무엇인지 모르겠습니다.

+0

PHP는 실제로 서버로 설계되지 않았습니다. –

+0

예, 이해합니다. 이 목적을 위해 Java를 사용하는 것이 훨씬 더 쉬울 것이지만 팀의 모든 구성원은 웹 프론트 엔드 (js, html, css, flash) 또는 PHP 개발자입니다. 그래서 저는 어떻게 든이 문제를 해결해야합니다. 그래서 전문가에게 물어 보려합니다. 누군가가 이미 이런 종류의 문제에 직면했을 수도 있습니다. – Mixo123

+0

PHP 소켓은 C 또는 C++ 소켓과 밀접한 관련이 있습니다. –

답변

1

플래시의 다중 사용자 통신을위한 가장 좋은 방법은 RTMP입니다. FMS 또는 Red5를 찾으십시오. 그것은 PHP가 아니지만, 이것이 올바른 방법이라고 생각합니다.

+0

그건 그렇고, RTMP는 기본적으로 스트리밍 비디오와 같은 것으로 만들어지지 않습니까? 제가 이해하는 한,이 기능을 사용하면 오버 헤드가 발생합니다 일반 텍스트 (또는 바이너리) 데이터를 처리하기 위키 백과의 – Mixo123

+0

: RTMP는 패킷을 송수신 할 수있는 여러 채널을 정의하며 서로 독립적으로 작동합니다. 예를 들어 RPC 요청 처리 전용 채널이 있습니다 응답, 비디오 스트림 데이터 용 채널, 오디오 스트림 데이터 용 채널, 대역 외 제어 메시지 용 채널 (조각 크기 협상 등) 등이 있습니다. 그래서 어디서나 사용할 수 있습니다. 2 방향 통신이 필요합니다 (예 : 채팅 또는 배율 게임). –

관련 문제