GatewayWorker와 ThinkPHP의 결합 및 기타 프레임워크 소개
이 글은 주로 GatewayWorker와 ThinkPHP 및 기타 프레임워크의 조합을 소개합니다. 이제 어느 정도 참고할만한 가치가 있습니다.
사용할 때 개발되었습니다. GatewayWorker 독자들이 가장 우려하는 부분은 기존 mvc 프레임워크(ThinkPHP Yii laravel 등)와의 통합 방법입니다. 다음은 공식적으로 권장되는 통합 방법입니다.
다이어그램 보기:
## 일반 원칙
기존# 🎜 🎜#mvc 프레임워크 프로젝트 및 GatewayWorkerIndependent배포는 각각을 방해하지 않습니다. other# 🎜🎜#
모든 비즈니스 로직 은 게시/가져옵니다. 웹사이트 페이지 mvc Framework
GatewayWorker에서 완료하세요. 클라이언트 수락 전송된 데이터 , 즉 GatewayWorker는 비즈니스 로직을 처리하지 않습니다 , GatewayWorker 은(는) #🎜 🎜#단방향 푸시 채널으로 처리됩니다.
mvc 프레임워크필요할 때에만 데이터를 브라우저에 적극적으로 푸시mvc 프레임워크에서만# 🎜🎜##🎜🎜 #게이트웨이 API 호출(GatewayClient)푸시 완료## 구체적인 구현 단계#🎜 🎜#1, # 🎜🎜#웹사이트 페이지
생성됨
GatewayWorker websocket 연결2. GatewayWorker는 페이지에서 시작된 연결을 발견했습니다. ,
연결에 해당하는 client_id이 웹사이트 페이지로 전송됩니다. #🎜🎜 #3, 웹사이트 페이지수신됨 client_id
#🎜 🎜#Ajax 요청 트리거(bind.php
라고 가정)client_id를 mvc 백엔드로 보내기 #🎜 🎜#4, mvc backendbind.php
client_idbind.php
)将client_id发到mvc后端
4、mvc后端bind.php
收到client_id后利用GatewayClient调用Gateway::bindUid($client_id, $uid)
将client_id与当前uid(用户id或者客户端唯一标识)绑定。如果有群组、群发功能,也可以利用Gateway::joinGroup($client_id, $group_id)
将client_id加入到对应分组
5、页面发起的所有请求都直接post/get到mvc框架统一处理,包括发送消息
6、mvc框架处理业务过程中需要向某个uid或者某个群组发送数据时,直接调用GatewayClient的接口<span style="color: #ff0000;"><strong><span style="text-decoration: underline;"><span style="color: #000000; text-decoration: underline;">Gateway::sendToUid</span></span> </strong><span style="text-decoration: underline; color: #000000;"><strong>Gateway::sendToGroup</strong></span></span>
를 받은 후 사용 GatewayClient
Gateway::bindUid($client_id, $uid)
will# 🎜🎜#client_id는 현재 uid
(사용자 ID 또는 클라이언트 고유 식별자)에 바인딩됩니다. 그룹 또는 그룹 전송 기능이 있는 경우
Gateway::joinGroup($client_id, $group_id)
을 사용하여 추가할 수도 있습니다. client_id를 해당 그룹화
5에 추가합니다. 페이지에서 시작된 모든 요청은 메시지
# 전송을 포함하여 통합 처리를 위해 mvc 프레임워크에 직접 게시/가져옵니다. 🎜🎜##🎜🎜# #🎜🎜#6. mvc 프레임워크의 비즈니스 프로세스 중에 #🎜🎜##🎜🎜#은 #🎜🎜# uid#🎜🎜# 또는 #🎜🎜#으로 데이터를 보내야 합니다. 그룹 #🎜🎜## 🎜🎜##🎜🎜#, GatewayClient 인터페이스#🎜🎜##🎜🎜##🎜🎜#<span style="color: #000000; 텍스트 장식: 밑줄 ;">Gateway::sendToUid #🎜🎜##🎜🎜# #🎜🎜#<span style="text-꾸밈: 밑줄 색상: #000000;">#🎜🎜#Gateway::sendToGroup#🎜🎜## 🎜🎜##🎜🎜# </span></span>
#🎜🎜#보내기를 기다려주세요#🎜🎜##🎜🎜##🎜🎜##🎜🎜### 샘플 코드#🎜🎜##🎜🎜#### GatewayWorker 조각#🎜🎜## 🎜🎜#GatewayWorker Events.php 코드(onConnect 콜백 설정 하나만)#🎜🎜#<?php use \GatewayWorker\Lib\Gateway;class Events { // 当有客户端连接时,将client_id返回,让mvc框架判断当前uid并执行绑定 public static function onConnect($client_id) { Gateway::sendToClient($client_id, json_encode(array( 'type' => 'init', 'client_id' => $client_id ))); } // GatewayWorker建议不做任何业务逻辑,onMessage留空即可 public static function onMessage($client_id, $message) { } }
/** * 与GatewayWorker建立websocket连接,域名和端口改为你实际的域名端口, * 其中端口为Gateway端口,即start_gateway.php指定的端口。 * start_gateway.php 中需要指定websocket协议,像这样 * $gateway = new Gateway(websocket://0.0.0.0:7272); */ ws = new WebSocket("ws://your_domain.com:7272");// 服务端主动推送消息时会触发这里的onmessage ws.onmessage = function(e){ // json数据转换成js对象 var data = eval("("+e.data+")"); var type = data.type || ''; switch(type){ // Events.php中返回的init类型的消息,将client_id发给后台进行uid绑定 case 'init': // 利用jquery发起ajax请求,将client_id发给后端进行uid绑定 $.post('./bind.php', {client_id: data.client_id}, function(data){}, 'json'); break; // 当mvc框架调用GatewayClient发消息时直接alert出来 default : alert(e.data); } };
<?php//加载GatewayClient。关于GatewayClient参见本页面底部介绍require_once '/your/path/GatewayClient/Gateway.php';// GatewayClient 3.0.0版本开始要使用命名空间use GatewayClient\Gateway;// 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值(ip不能是0.0.0.0) Gateway::$registerAddress = '127.0.0.1:1236';// 假设用户已经登录,用户uid和群组id在session中 $uid = $_SESSION['uid']; $group_id = $_SESSION['group'];// client_id与uid绑定 Gateway::bindUid($client_id, $uid);// 加入某个群组(可调用多次加入多个群组) Gateway::joinGroup($client_id, $group_id);
<?php//加载GatewayClient。关于GatewayClient参见本页面底部介绍require_once '/your/path/GatewayClient/Gateway.php';// GatewayClient 3.0.0版本开始要使用命名空间use GatewayClient\Gateway;// 设置GatewayWorker服务的Register服务ip和端口,请根据实际情况改成实际值(ip不能是0.0.0.0) Gateway::$registerAddress = '127.0.0.1:1236';// 向任意uid的网站页面发送数据 Gateway::sendToUid($uid, $message);// 向任意群组的网站页面发送数据 Gateway::sendToGroup($group, $message);
注意
以上仅是mvc框架与GatewayWorker官方推荐的结合方式,并不是强制使用此方式,开发者可以自由变化选择结合方式以适应自己的业务需求。
当然也可以采用客户端与GatewayWorker直接双向通讯的方式完成业务通讯。
以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!
相关推荐:
위 내용은 GatewayWorker와 ThinkPHP의 결합 및 기타 프레임워크 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 클라이언트 URL (CURL) 확장자는 개발자를위한 강력한 도구이며 원격 서버 및 REST API와의 원활한 상호 작용을 가능하게합니다. PHP CURL은 존경받는 다중 프로모토콜 파일 전송 라이브러리 인 Libcurl을 활용하여 효율적인 execu를 용이하게합니다.

Alipay PHP ...

고객의 가장 긴급한 문제에 실시간 인스턴트 솔루션을 제공하고 싶습니까? 라이브 채팅을 통해 고객과 실시간 대화를 나누고 문제를 즉시 해결할 수 있습니다. 그것은 당신이 당신의 관습에 더 빠른 서비스를 제공 할 수 있도록합니다.

기사는 PHP 5.3에 도입 된 PHP의 LSB (Late STATIC BING)에 대해 논의하여 정적 방법의 런타임 해상도가보다 유연한 상속을 요구할 수있게한다. LSB의 실제 응용 프로그램 및 잠재적 성능

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

기사는 입력 유효성 검사, 인증 및 정기 업데이트를 포함한 취약점을 방지하기 위해 프레임 워크의 필수 보안 기능을 논의합니다.

이 기사에서는 프레임 워크에 사용자 정의 기능 추가, 아키텍처 이해, 확장 지점 식별 및 통합 및 디버깅을위한 모범 사례에 중점을 둡니다.

PHP 개발에서 PHP의 CURL 라이브러리를 사용하여 JSON 데이터를 보내면 종종 외부 API와 상호 작용해야합니다. 일반적인 방법 중 하나는 컬 라이브러리를 사용하여 게시물을 보내는 것입니다 ...
