Workman을 사용하여 채팅방 만들기
이 글을 쓰는 이유는 무엇인가요?
워크맨을 여러번 배웠지만 매번 실패했습니다. (원하는 기능을 이루지 못했어요, 바보같아서 용서해주세요). 하지만 이번에도 이전에 수행되지 않았던 기능을 구현하는 데 몇 시간이 걸렸습니다. 실제로 간단한 기능은 1대1 메시지 보내기와 메시지 방송(그룹 채팅) 두 가지가 있습니다. 이 기능은 오랫동안 swoole로 구현해 왔고, 늘 Think-Worker를 사용하고 싶었기 때문이기도 합니다. 버전.
workman은 Windows에서 실행할 수 있기 때문에 왜 swoole을 사용하지 않는지 묻지 마십시오.
(1) 먼저 thinkphp+workerman 설치에 대해 간략히 설명하겠습니다.
thinkphp5.1 설치
composer create-project topthink/think=5.1.x-dev tp5andworkman
install think-worker
composer require topthink/think-worker=2.0.*
workman 직접 설치
composer require workerman/workerman
(2) think-worker 코드를 먼저 살펴보자
config/worker_server.php
-
먼저 메시지를 브로드캐스트하는 서버의 예입니다. 메시지는 10초마다 정기적으로 브로드캐스트됩니다.
'onWorkerStart' => function ($worker) { \Workerman\Lib\Timer::add(10, function()use($worker){ // 遍历当前进程所有的客户端连接,发送自定义消息 foreach($worker->connections as $connection){ $send['name'] = '系统信息'; $send['content'] = '这是一个定时任务信息'; $send['time'] = time(); $connection->send(json_encode($send)); } }); }
. 그러나 onMessage 중에는 $worker 개체를 얻을 수 없으므로 메시지가 브로드캐스트될 수 없습니다.
'onMessage' => function ($connection, $data) { $origin = json_decode($data,true); $send['name'] = '广播数据'; $send['content'] = $origin['content']; $message = json_encode($send); foreach($worker->connections as $connection) { $connection->send($message); } }
다양한 방법을 시도했지만 아무것도 작동하지 않는 것 같았습니다
'onMessage' => function ($connection, $data)use($worker) { // 这样是获取不到 $worker 对象的 // ...省略代码 }
그래서 thinkphp가 우리를 위해 캡슐화한 think-worker 프레임워크를 버리고 직접 작성해야 합니다(또는 프레임워크의 내부 코드를 수정해야 합니다)
수정 프레임워크의 내부 코드: /vendor/topthink/think-worker/src/command/Server.php
, 주로 onMessage 메소드를 직접 추가하세요/vendor/topthink/think-worker/src/command/Server.php
,主要是把 onMessage 方法自己加进去
use() 就是把外部变量传递到函数内部使用,或者使用global $worker
$worker = new Worker($socket, $context); $worker->onMessage = function ($connection, $data)use($worker) { $origin = json_decode($data,true); $send['name'] = '广播数据'; $send['content'] = $origin['content']; $send['uid'] = $connection->uid; $message = json_encode($send); foreach($worker->connections as $connection) { $connection->send($message); } };
这样,我们就能够获取到 $worker 对象了
$worker->onMessage = function ($connection, $data)use($worker) { ... }
(3)$connection 绑定 uid
其实你早都已经看出,$worker->connections 获取到的是当前所有用户的连接,connections 即为其中一个链接。
记录websocket连接时间:
$worker->onConnect = function ($connection) { $connection->login_time = time(); };
获取websocket连接时间:
$worker->onMessage = function ($connection, $data)use($worker) { $login_time = $connection->login_time; };
由此可以看出,我们可以把数据绑定到 $connection 连接的一个属性,例如:
$connection->uid = $uid;
当JavaScript端在连接websocket服务器成功后,即把自己的 uid 立马发送服务端绑定:
$worker->onMessage = function ($connection, $data)use($worker) { $origin = json_decode($data,true); if(array_key_exists('bind',$origin)){ $connection->uid = $origin['uid']; } };
(4)单播发送消息,即自定义发送
$worker->onMessage = function ($connection, $data)use($worker) { $origin = json_decode($data,true); $sendTo = $origin['sendto']; // 需要发送的对方的uid $content = $origin['content']; // 需要发送到对方的内容 foreach($worker->connections as $connection) { if( $connection->uid == $sendTo){ $connection->send($content); } } };
到此,已经完成基于 workman 的自定义对象发送消息。
由于该php文件存放于composer中,只需要把该文件复制出来,放到application/command
전역 $worker
rrreee를 사용하세요. 이런 식으로 $worker 개체
rrreee
를 얻을 수 있습니다. (3) $connection은 uid
를 바인드합니다. $worker->connections 얻은 것은 현재 모든 사용자의 연결이고 연결은 링크 중 하나입니다. 웹소켓 연결 시간 기록:rrreee
웹소켓 연결 시간 가져오기:rrreee데이터를 $connection 연결 속성에 바인딩할 수 있음을 알 수 있습니다. 예: rrreeeJavaScript 측이 websocket 서버 성공 후 즉시 바인딩을 위해 서버에 uid를 보냅니다. rrreee (4) 유니캐스트 메시지, 즉 사용자 지정 보내기 rrreee
이 시점에서 workman 기반 사용자 지정 개체 메시지가 완성되었습니다. 🎜🎜php 파일은 작곡가에 저장되어 있으므로 파일을 복사해서application/command
에 넣고 네임스페이스를 수정한 후 자신의 프로젝트에 저장하기만 하면 됩니다🎜🎜🎜 (5) 비교 swoole🎜🎜🎜1. Workman은 Windows 시스템에서 실행할 수 있지만 swoole은 실행할 수 없습니다. 🎜🎜2. workman: $worker->connections는 모든 연결을 가져오고, $connection->id는 자체 연결 ID를 가져옵니다. $server->connections는 모든 연결을 가져오고, $connection->fd는 자체 연결을 가져옵니다. ID. 🎜🎜3. workman이 시작될 때 onWorkerStart 메서드가 실행되며 swoole은 WorkerStart를 사용하여 타이머를 시작할 수 있습니다. 🎜🎜대화방이나 타이머는 여전히 워크맨이 더 편리해요. 🎜🎜🎜ThinkPHP 관련 기술 기사를 더 보려면 🎜🎜🎜ThinkPHP 사용 튜토리얼🎜🎜🎜 칼럼을 방문하여 알아보세요! 🎜🎜위 내용은 Workman을 사용하여 채팅방 만들기의 상세 내용입니다. 자세한 내용은 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)

뜨거운 주제











MySQL 및 Java를 사용하여 간단한 채팅방 기능을 구현하는 방법 소개: 오늘날 소셜 미디어가 널리 보급됨에 따라 사람들은 정보를 교환하고 공유하기 위해 온라인 채팅에 점점 더 의존하고 있습니다. MySQL과 Java를 이용하여 간단한 채팅방 기능을 구현하는 방법은 매우 흥미롭고 실용적인 프로젝트입니다. 이 기사에서는 MySQL과 Java를 사용하여 이 기능을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 데이터베이스 구축 먼저 채팅방 관련 정보를 저장할 데이터베이스를 MySQL에 생성해야 합니다.

Go 언어를 사용하여 Websocket 채팅방을 개발하는 방법 Websocket은 연결을 설정하여 서버와 클라이언트 간의 양방향 통신을 허용하는 실시간 통신 프로토콜입니다. Websocket은 실시간 메시지 교환이 가능하고 효율적인 성능을 제공하므로 채팅방을 개발할 때 매우 좋은 선택입니다. 이 기사에서는 Go 언어를 사용하여 간단한 Websocket 채팅방을 개발하는 방법을 소개하고 몇 가지 구체적인 코드 예제를 제공합니다. 1. 준비 1. Go 설치

JavaScript 기반 실시간 채팅방 구축 인터넷의 급속한 발전으로 사람들은 인스턴트 메시징과 실시간 대화 경험에 점점 더 많은 관심을 기울이고 있습니다. 일반적인 인스턴트 메시징 도구인 실시간 채팅방은 개인과 기업 모두에게 매우 중요합니다. 이 글에서는 JavaScript를 사용하여 간단한 실시간 채팅방을 구축하는 방법을 소개하고 해당 코드 예제를 제공합니다. 먼저 채팅방의 UI 인터페이스로 프런트 엔드 페이지가 필요합니다. 다음은 간단한 HTML 구조의 예입니다: <!DOCTYPE

TP6Think-SwooleRPC 서비스의 성능 최적화 및 디버깅 1. 서론 인터넷의 급속한 발전으로 인해 분산 컴퓨팅은 현대 소프트웨어 개발에서 없어서는 안 될 부분이 되었습니다. 분산 컴퓨팅에서 RPC(RemoteProcedureCall, 원격 프로시저 호출)는 네트워크를 통한 메서드 호출을 구현할 수 있는 일반적으로 사용되는 통신 메커니즘입니다. 고성능 PHP 프레임워크인 Think-Swoole은 RPC 서비스를 잘 지원할 수 있습니다. 하지만

ThinkPHP6 채팅방 개발 가이드: 실시간 커뮤니케이션 기능 구현 소개: 인터넷의 급속한 발전에 따라 실시간 커뮤니케이션에 대한 수요도 늘어나고 있습니다. 실시간 소통의 일반적인 방법으로 채팅방은 폭넓은 관심과 활용을 받아왔습니다. 이 기사에서는 ThinkPHP6 프레임워크를 사용하여 실시간 통신 기능을 구현하는 간단하고 빠른 방법을 제공합니다. 1. 환경 구성: 시작하기 전에 개발 환경을 구성해야 합니다. PHP 및 ThinkPHP6 프레임워크가 설치되어 있는지 확인하세요. 동시에 이 기사는 다음과 같은 결과를 가져올 것입니다.

PHP와 Websocket을 사용하여 채팅방 기능 개발 소개: 인터넷의 급속한 발전으로 채팅방은 사람들이 일상 생활에서 의사소통하고 친목을 도모하는 중요한 수단 중 하나가 되었습니다. PHP와 Websocket 기술을 사용하여 채팅방 기능을 개발하면 실시간 양방향 통신이 가능하고 사용자에게 보다 원활하고 편리한 채팅 경험을 제공할 수 있습니다. 이 기사에서는 PHP와 Websocket을 사용하여 간단한 채팅방을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 준비: 개발을 시작하기 전에 다음 사항을 확인해야 합니다.

인터넷 시대에 채팅방은 사람들이 소통하고 친목을 도모하는 중요한 장소가 되었습니다. WebSocket 기술의 출현으로 실시간 통신이 더욱 원활하고 안정적으로 이루어졌습니다. 오늘은 Swoole 프레임워크를 활용하여 WebSocket 기반의 채팅방을 빠르게 구축하는 방법을 소개합니다. Swoole은 C 언어로 작성된 고성능 PHP 코루틴 네트워크 통신 프레임워크로 비동기 IO, 코루틴, 네트워크 통신 및 기타 기능을 통합하여 Node.js와 같은 PHP 코드를 만듭니다.

웹 개발 세계에서는 라이브 채팅 기능이 점점 인기를 얻고 있습니다. 사용자가 실시간으로 쉽게 상호 작용하고 의사소통과 이해를 높일 수 있도록 도와줍니다. 실시간 채팅을 구현하기 위해서는 WebSocket 프로토콜을 사용해야 하며, WebSocket 요청을 처리할 수 있는 프로그래밍 언어가 필요합니다. 이번 글에서는 PHP와 WebSocket 통합을 이용하여 실시간 채팅방 개발을 구현하는 방법을 소개하겠습니다. WebSocket은 브라우저와 서버 간의 실시간 통신을 가능하게 하는 전이중 통신 프로토콜입니다.
