2012-02-10 4 views
3

나는 서버의 데이터를 클라이언트의 PHP 웹 페이지로 직접 보내려고한다. 나는이 질문을 여러 번 봤다. 그리고 나는 아약스 push 엔진이나 cometD와 같은 다른 것들을 사용하고 싶지 않다. 모든 연결된 클라이언트에게 데이터를 보낼 내 서버에 프로그램을 올릴 수있는 방법이 있는지 알고 싶습니다. 나는 이것이 C 또는 C++ 또는 C#에서 행해지기를 더 좋아할 것이다. 가능하다면 어떻게 할지를 스스로 프로그램 할 수있다.C http server programming

+3

HTTP로이를 수행하려면 폴링 또는 혜성 만 두 가지 옵션이 있습니다. 어떤 언어로도 구현할 수 있습니다. – Flexo

답변

1

어쩌면 당신은 HTTP 프로토콜이 작동하는 방법을 모르겠다. 먼저 자신에 대해 더 자세히 기록해야합니다. 나는 당신의 사건을 위해 그것을 사용하는 방법을 설명하려고합니다 :

  • 폴링을 각 X 초는, 클라이언트가 원하는 내용과 웹 페이지를 요청합니다. 이것은 HTTP를 사용하는 표준 방법입니다 : 클라이언트는 GET을 보내고, 서버는 응답을 보냅니다.

  • 푸시 : 각 클라이언트는 웹 페이지를 요청하지만 실제로 서버가 메시지를 보내기를 기다립니다. 당신이, 내가 어떤 언어 구현에 대해 이야기하고 있지 않다시피 그냥

을 보내 그가 응답을 클라이언트까지 GET, 서버 대기를 보내 : 당신은 "푸시"데이터가이 HTTP 채널을 사용할 수 있습니다 당신이 원하는 것을하기 위해 HTTP 프로토콜이 어떻게 벗어날 수 있는지에 대해서. Push 방식의 나쁜 점은 클라이언트가 유휴 상태 일 때도 X 클라이언트가 X 소켓을 열어 놓을 수 있다는 것입니다. 당기기 접근법에서는 일어나지 않지만 응답이 보내지면 소켓은 닫힙니다.

이제 원하는 경우 클라이언트에서 연결을 시작해야합니다.

$.get('/wait_for_message', function(data) { 
    alert('My server send:' + data); 
}) 

서버의 뜻은 GET /wait_for_message HTTP/1.1 요청을 받았습니다 : 이것은 "아약스"부분이 유용 할 수있는 곳의 jQuery를에 볼 수 있도록합니다. 데이터를 다시 보내는 대신 "대기중인 클라이언트"목록에이 소켓을 저장할 수 있습니다. 그런 다음이 목록을 반복하면서 모든 소켓에 데이터를 쓰고 모든 클라이언트가 데이터를 수신 할 수 있습니다.

이제이 메카니즘을 제대로 이해하기가 쉽지 않습니다. 그래서 다른 사람들이 제안한 것처럼 다른 프로젝트를 사용할 수 있습니다.

0

실제 요청이 무엇인지를 무시하고 데이터베이스의 데이터를 형식화하고 제공하기 위해 매우 간단한 웹 서버를 모든 언어로 작성/수정할 수 있습니다. 헤더와 데이터를 소켓에 작성하기 만하면됩니다. 일부 목록에 따라 적극적으로 연결을 시작하여 동일한 작업을 수행 할 수 있습니다.