PHP JABBER : 로그인하고 메시지를 확인하고 연결을 끊으면 다른 사용자가 끝나면 연결이 끊어진 것으로 나타납니다.

StackOverflow https://stackoverflow.com/questions/847854

  •  21-08-2019
  •  | 
  •  

문제

내가하는 일이 절대적으로 정확한지 확실하지 않습니다. 하지만 여기가 간다 :

  1. 사용자 로그인 웹 기반 인터페이스를 통해 채팅에 로그인합니다
  2. 사용자에게 혜성을 통한 업데이트에 대한 정보가 있습니다
  3. 사용자는 Jabber 서버에 추가로 연결되는 PHP 파일을 얻은 세부 정보를 입력합니다.

이제 문제는 사용자가 메시지를 보내려고 할 때 간단하고 Jabber 서버에 연결하여 메시지를 보내는 PHP를 실행한다는 것입니다. 메시지를 기다릴 때 문제가 발생합니다. 원인으로 로그인하고 메시지를 확인하고 연결을 끊으면 다른 사용자가 끝나면 연결이 끊어졌습니다.

이 문제가 잘못된 방식으로 접근하고 있습니까? 사이에있는 PHP 레이어 대신 Jabber 서버 (JavaScript를 통해)에 직접 연결해야합니까? PHP를 통해 메시지를받는 방법은 무엇입니까?

도움이 되었습니까?

해결책

이것은 HTTP의 고유 한 문제 (또는 기능)입니다. 지속적인 연결이 없습니다 (실제로는 아님). 해결 방법이 필요하고 실제 해결책이 없습니다.

Java 또는 Flash로 할 수는 있지만 실제로는 좋지 않습니다 (JavaScript 4TW!).

다른 가능성은 브라우저와 웹 서버 간의 연결을 웹 서버와 Jabber 서버 사이의 연결로 변환하는 중간 클라이언트를 만드는 것입니다. 지저분하지만 가능합니다.

또는 이것에 도움이되는 API가있을 수 있습니다.

JavaScript를 통해 Jabber 서버에 직접 연결합니다
나는 최신 Ajax Inventions를 잤을 지 모르지만 Afaik은 소스 -HTML 파일 (Greasmonkey 및 Addons 무시)에서 나오는 호스트 와만 통신 할 수 있습니다. 다른 도메인, 다른 포트, 기간이 없습니다. Jabber 서버에게 ChatPage-HTML을 브라우저에 제공하는 방법을 가르치지 않는 한 문제가 발생합니다. 또한 연결을 유지하는 것은 작동하지 않습니다. 이로 인해 다중 반응이 필요하기 때문입니다. 그것들은 Mozilla에 의해서만 지원됩니다 이것이 추악한 오리 혜성이 처음에 존재하는 이유입니다. 혜성 자체는 데이터를 전송하는 동안 연결을 유지할 수없는 일을 피하기위한 해결 방법입니다.

다른 팁

나는 그것을 시도하지 않았지만 당신은보고 싶을 것입니다 xmpphp. 둘째, 웹 사이트에 로그인 한 한 사용자가 XMPP 서버 (일명 Jabber 서버)에 로그인 한 상태로 유지하는 것을 고려할 수 있습니다. 그들이 당신의 웹 사이트를 떠나서 돌아 오지 않을 경우를 대비하여 어떤 종류의 타임 아웃을 원할 것입니다.

JavaScript를 통해 연결 해야하는지 여부에 관해서는, 왜 할 수 없는지 모르겠습니다. 나는 당신이 당신에게 가장 간단한 것처럼 보이도록 제안합니다. 체크 아웃하고 싶을 수도 있습니다 스트로프, 그 경우에 좋은 말을 듣습니다.

내가 광범위하게 사용했던 유일한 XMPP 라이브러리는 헤드 스톡, 그러나 사용이 필요합니다 파이썬 그리고 카마 엘리아.

따라서 내가 알 수있는 한, 문제는 다른 쪽 끝의 Jabber 사용자가 응답 할 때입니다. 적어도 부분적으로 문제는 사용자가 Jabber 서버의 다른 사용자에게 응답하고 있지만 PHP 스크립트가 연결을 열지 않고이 응답이 발생했음을 알고 싶어한다는 것입니다 (스크립트 이후에 의미가 있습니다. 아마도 더 이상 실행되지 않을 것입니다).

정말 어리석은 옵션은 다음과 같습니다.

  • 페이지에서 사용자를 보내거나받을 수 있도록 Jabber 서버에 대한 연결을 중개 할 수있는 PHP 스크립트가 있어야합니다.

  • Ajax를 사용하여 사용자를 위해 메시지를 보냅니다 (Ajax는 위의 스크립트를 가리키면 스크립트가 메시지를 보냅니다.)

  • JavaScript Infinite 루프가 10 초 정도 같은 스크립트를 핑하여 메시지가 있는지 확인하십시오. 있으면 고객에게 다시 전달되어 사용자에게 출력됩니다.

위에는 두 가지 문제 만 있습니다.

1) 메시지가 전송 될 때 사용자가 연결되어 있지 않으면 PHP 스크립트가 여전히 메시지를 보거나 얻을 수 있습니까?

2) 3 초마다 Ajax 요청을하는 클라이언트 측 루프는 아마도 큰 배수구 일 것입니다.

Solution 2:

오픈 파이어 Jabber 서버. Web Chat 클라이언트가 내장되어 있으며 FastPath라는 애드온이 있습니다. 이는 클라이언트 엔드에서 HTML 기반 채팅을 처리하기위한 것입니다 (예 : 너무 많은 지원 페이지에서 "에이전트와의 채팅!"기능이 있습니다.)

우리는 이것을 직장에서 사용하고 매우 사용자 정의 가능하며 다른 스크립트와 통합 될 수 있습니다 (예 : 로그인에서 사용자 세부 사항을 채우거나 사용자 정의 아바타를 추가하는 스크립트를 원한다면) 등 (OpenFire )는 다른 확장과 애드온을 가지고 있으며, 이것이 당신이 원하는 것이 아니라면 아마도 당신이 찾고있는 것을 가지고있을 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top