>백엔드 개발 >PHP 튜토리얼 >데이터를 수신하고 이를 LAN 웹사이트로 전송하는 WeChat 공개 계정과 관련된 일부 문제

데이터를 수신하고 이를 LAN 웹사이트로 전송하는 WeChat 공개 계정과 관련된 일부 문제

WBOY
WBOY원래의
2016-08-18 09:16:011289검색

나는 단지 아이디어를 찾고, 전문가의 의견을 듣고 싶을 뿐이지, 구체적인 계획을 세우는 데 도움을 청하는 것이 아니라, 연구의 방향을 제시하고 싶을 뿐이다. 저는 PHP/Java를 알고 있으며 Baidu에 비해 약간의 Python을 작성할 수 있습니다.
로컬 LAN에는 PHP 웹 사이트를 실행하는 서버가 있습니다. 이 서버는 심층 인트라넷에 있습니다(동적 공용 IP + 네트워크 관리는 포트 전달을 허용하지 않음). xx 클라우드의 컴퓨터실에 또 다른 서버가 있습니다. 독립적인 공인 IP를 가지고 있으며 PHP를 실행하여 WeChat과 연결합니다. 이제 WeChat에서 보낸 정보를 xx 클라우드 호스트를 통해 LAN에 있는 서버로 전달할 수 있는 기능을 만들고 싶습니다. xx 클라우드 호스트는 PHP/Python/Java를 실행하는 데 사용할 수 있는 Linux 운영 체제이고, LAN 호스트는 PHP/Python/Java를 실행할 수 있는 Windows 운영 체제가 있는 일반 PC입니다. 데이터베이스(또한 이 질문은 The selected Database)에 대한 더 미묘한 아이디어가 있는지 궁금합니다. .
이제 몇 가지 예비 아이디어가 생겼습니다. 여러분의 의견을 듣고 싶습니다. 감사합니다!
1. 위챗->클라우드 호스트(PHP)->데이터베이스
근거리 통신망은 Python이나 Java를 사용하여 로컬 데이터베이스에 새로운 데이터를 얻기 위해 폴링합니다.
2. WeChat -> 클라우드 호스트(PHP) -> Python으로 작성된 소켓 서버로 크로스 프로세스 전송
근거리 통신망은 Python 또는 Java를 사용하여 클라우드 호스트와 소켓 링크를 설정하며 실제 -시간 통신은 데이터베이스에 저장됩니다.
3. 위챗 -> 클라우드 호스트(PHP) -> 데이터베이스.
마스터-슬레이브 데이터베이스를 동기화하기 위해 로컬 데이터베이스와 원격 데이터베이스가 생성됩니다(핵심은 확인하지 않고 쓰기만 가능하다는 것) )
4. WeChat->클라우드 호스트(PHP)->데이터베이스
두 데이터베이스를 직접 연결하여 일부 작업을 수행하는 프로그램을 로컬에서 작성합니다. .
위 내용은 이 문제에 대해 제가 생각한 결과 중 일부입니다. 각 방법이 전체 시스템의 속도와 효율성에 영향을 미칠 것이라고 생각합니다.

답글 내용:

나는 단지 아이디어를 찾고, 전문가의 의견을 듣고 싶을 뿐이지, 구체적인 계획을 세우는 데 도움을 청하는 것이 아니라, 연구의 방향을 제시하고 싶을 뿐이다. 저는 PHP/Java를 알고 있으며 Baidu에 비해 약간의 Python을 작성할 수 있습니다.
로컬 LAN에는 PHP 웹 사이트를 실행하는 서버가 있습니다. 이 서버는 심층 인트라넷에 있습니다(동적 공용 IP + 네트워크 관리는 포트 전달을 허용하지 않음). xx 클라우드의 컴퓨터실에 또 다른 서버가 있습니다. 독립적인 공인 IP를 가지고 있으며 PHP를 실행하여 WeChat과 연결합니다. 이제 WeChat에서 보낸 정보를 xx 클라우드 호스트를 통해 LAN에 있는 서버로 전달할 수 있는 기능을 만들고 싶습니다. xx 클라우드 호스트는 PHP/Python/Java를 실행하는 데 사용할 수 있는 Linux 운영 체제이고, LAN 호스트는 PHP/Python/Java를 실행할 수 있는 Windows 운영 체제가 있는 일반 PC입니다. 데이터베이스(또한 이 질문은 The selected Database)에 대한 더 미묘한 아이디어가 있는지 궁금합니다. .
이제 몇 가지 예비 아이디어가 생겼습니다. 여러분의 의견을 듣고 싶습니다. 감사합니다!
1. 위챗->클라우드 호스트(PHP)->데이터베이스
근거리 통신망은 Python이나 Java를 사용하여 로컬 데이터베이스에 새로운 데이터를 얻기 위해 폴링합니다.
2. WeChat -> 클라우드 호스트(PHP) -> Python으로 작성된 소켓 서버로 크로스 프로세스 전송
근거리 통신망은 Python 또는 Java를 사용하여 클라우드 호스트와 소켓 링크를 설정하며 실제 -시간 통신은 데이터베이스에 저장됩니다.
3. WeChat->클라우드 호스트(PHP)->데이터베이스.
로컬 데이터베이스와 원격 데이터베이스 간의 마스터-슬레이브 데이터베이스 동기화를 생성합니다(핵심은 확인하지 않고 쓰기만 가능하다는 것)
4. WeChat->클라우드 호스트(PHP)->데이터베이스
두 데이터베이스를 직접 연결하여 일부 작업을 수행하는 프로그램을 로컬에서 작성합니다. .
위 내용은 이 문제에 대해 제가 생각한 결과 중 일부입니다. 각 방법이 전체 시스템의 속도와 효율성에 영향을 미칠 것이라고 생각합니다.

redis의 구독/게시 기능을 사용할 수 있으며, 메시지를 즉시 전달할 수 있습니다

두 번째 아이디어에 두께를 더해보겠습니다

WeChat-> 클라우드 호스트(PHP)-> RabbitMQ 메시지 대기열 서버를 시작하고 WeChat 메시지를 대기열에 넣습니다.-> LAN 호스트가 RabbitMQ 클라이언트를 시작하고 서버에서 메시지를 검색합니다. 데이터베이스에 있습니다

전체 메시지 전송 프로세스는 비동기식으로 수행되며 어떤 링크에서도 막힘이 없으며 올바르게 수행되며 바퀴를 다시 만들 필요가 없습니다

직접 제공한 1, 2, 3, 4와 같이 다양한 옵션이 있습니다. 이때는 비즈니스 시나리오에 따라 다릅니다.

  1. 시간이 촉박하신가요?

  2. 데이터 용량이 큰가요?

  3. 지연 시간 요구 사항이 높나요?

  4. 동시성은 어떤가요?

  5. 하드웨어, 소프트웨어 투자에 제한이 있나요?

땅콩껍질은 못쓰나요

이 4가지 솔루션은 모두 이론적으로 가능합니다. 하지만 실제 시나리오에서는 다음 사항에 주의하세요.
1. 모든 솔루션은 쓰기 작업입니다. 읽기 작업이 있으면 일부 솔루션은 처리하기 어려울 것입니다. 비동기 폴링에 의존한다면 분명히 데이터가 있을 것입니다. 불일치
2. 통신을 위해 오랫동안 연결을 유지하면 짧은 시간 동안 데이터가 없으면 방화벽이 링크를 클릭합니까? 이는 매우 어렵고 매우 일반적인 큰 문제입니다. 특히 네트워크 관리에서 포트 포워딩을 제공하지 않는 경우 더욱 그렇습니다.
3. 옵션 4와 관련하여 네트워크 지연으로 인해 사용자 작업에 좀비 또는 더티 데이터가 발생합니까?

중국의 네트워크 품질이 매우 열악한 경우 선형 작업을 처리하는 여러 원격 서버를 피하고 긴 원격 연결을 피하십시오.

일반적으로 근거리 통신망에서 WeChat 서버를 설정할 때 포트 포워딩을 사용합니다(동적 IP인 경우 동적 도메인 이름을 구성해야 함). 이제 귀하의 PHP 서버는 본질적으로 비즈니스를 처리하지 않고 프록시 역할만 수행합니다. 그러면 두 가지 옵션이 있습니다. 1. 공용 네트워크 서버에 nginx를 구축하고 동적 도메인 이름 기술을 통해 LAN 서버에 대한 역방향 프록시를 사용합니다. java의 dubbo와 같은 서비스 중간 가격은 외부 네트워크 서버에서 근거리 통신망의 서비스를 원격으로 호출할 수 있습니다

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.