Heim >PHP-Framework >Workerman >Lassen Sie uns darüber sprechen, wie Sie Workerman verwenden, um die Instant-Chat-Funktion zu implementieren
In diesem Artikel erfahren Sie, wie Sie mit workerman Instant-Chat implementieren. Es hat einen gewissen Referenzwert. Freunde in Not können sich darauf beziehen. Ich hoffe, es wird für alle hilfreich sein.
Verwandte Empfehlungen: „workerman Tutorial“
Entwicklungsdokumentation: http://doc2.workerman.net/
Laden Sie die serverseitige Installationsdatei herunter:
Es gibt zwei Versionen: Windows Version und Linux-Version, die von mir heruntergeladene Linux-Version kann auch unter Windows ausgeführt werden.
Nach dem Öffnen gibt es diese Dateien:
Sie können diese Datei auf dem Server oder im Projekt ablegen. Was ausgeführt werden muss, ist die letzte Datei start_for_win.bat.
Erfolgreich ausgeführt.
Ändern Sie die Datei start_gateway.php:
<?php /** * This file is part of workerman. * * Licensed under The MIT License * For full copyright and license information, please see the MIT-LICENSE.txt * Redistributions of files must retain the above copyright notice. * * @author walkor<walkor@workerman.net> * @copyright walkor<walkor@workerman.net> * @link http://www.workerman.net/ * @license http://www.opensource.org/licenses/mit-license.php MIT License */ use \Workerman\Worker; use \Workerman\WebServer; use \GatewayWorker\Gateway; use \GatewayWorker\BusinessWorker; use \Workerman\Autoloader; // 自动加载类 require_once __DIR__ . '/../../vendor/autoload.php'; // gateway 进程,这里使用Text协议,可以用telnet测试 $gateway = new Gateway("websocket://0.0.0.0:8282"); // gateway名称,status方便查看 $gateway->name = 'YourAppGateway'; // gateway进程数 $gateway->count = 4; // 本机ip,分布式部署时使用内网ip $gateway->lanIp = '127.0.0.1'; // 内部通讯起始端口,假如$gateway->count=4,起始端口为4000 // 则一般会使用4000 4001 4002 4003 4个端口作为内部通讯端口 $gateway->startPort = 2900; // 服务注册地址 $gateway->registerAddress = '127.0.0.1:1238'; // 心跳间隔 $gateway->pingInterval = 60; // 心跳数据 $gateway->pingData = '{"type":"ping"}'; /* // 当客户端连接上来时,设置连接的onWebSocketConnect,即在websocket握手时的回调 $gateway->onConnect = function($connection) { $connection->onWebSocketConnect = function($connection , $http_header) { // 可以在这里判断连接来源是否合法,不合法就关掉连接 // $_SERVER['HTTP_ORIGIN']标识来自哪个站点的页面发起的websocket链接 if($_SERVER['HTTP_ORIGIN'] != 'http://kedou.workerman.net') { $connection->close(); } // onWebSocketConnect 里面$_GET $_SERVER是可用的 // var_dump($_GET, $_SERVER); }; }; */ // 如果不是在根目录启动,则运行runAll方法 if(!defined('GLOBAL_START')) { Worker::runAll(); }
Zeile 24, ändern Sie das TCP-Protokoll in das WebSocket-Protokoll;
Zeilen 38 und 40, legen Sie die vom Server an den Client gesendete Heartbeat-Zeit fest und erkennen Sie, ob der Client verbunden ist , nicht Die Verbindung wird unterbrochen.
Der folgende Inhalt ist standardmäßig auskommentiert. Sie können ihn entsprechend Ihren Anforderungen öffnen oder ändern.
Führen Sie die Datei start_for_win.bat erneut aus:
Das Protokoll ändert sich zum Websocket-Protokoll und Sie können jetzt Vorgänge innerhalb des Projekts ausführen.
Sie müssen außerdem eine weitere Datei herunterladen: https://github.com/walkor/GatewayClient
Legen Sie diese Dateien in den Erweiterungsordner von thinkphp (ich verwende die Version thinkphp5.0):
Fast alle Methoden sind in der Datei Gateway.php geschrieben.
Eine einfache Frontend-Seite geschrieben:
nbsp;html> <meta> <meta> <meta> <title></title>
Die Zeilen 42-52 übergeben die client_id an den Hintergrund und binden sie an den Benutzer in der Benutzertabelle.
Backend-Code:
<?php namespace app\api\controller; use think\Controller; use GatewayClient\Gateway; use think\Db; class Index extends Controller { public function websocket(){ $where=[]; $user_id=1; $where['from_id|to_id']=$user_id; $msg=Db::name('msg')->where($where)->select(); foreach ($msg as $key=>$val){ $msg[$key]['createtime']=date('Y-m-d H:i:s',$val['createtime']); $msg[$key]['user_name']=Db::name('user')->where(['id'=>$val['from_id']])->value('name'); } $this->assign('msg',$msg); return view(); } //绑定用户 public function user_bind($user_id=1){ //$user_id=1; //发送人用户id $client_id = input('post.client_id'); // $user=Db::name('user')->where(['id'=>$user_id])->find(); Gateway::bindUid($client_id, 1); return $client_id; } //发送信息 public function send_msg(){ $msg=input('msg'); if($msg){ $data=[ 'msg'=>$msg, 'from_id'=>1, 'to_id'=>2, 'createtime'=>time() ]; Db::name('msg')->insert($data); Gateway::sendToUid(1,$msg); Gateway::sendToUid(2,$msg); } return 'success'; } }
Senden Sie die Nachricht und speichern Sie sie in der Datenbank. Die Seite wird angezeigt.
Weitere Kenntnisse zum Thema Computerprogrammierung finden Sie unter: Programmiervideos! !
Das obige ist der detaillierte Inhalt vonLassen Sie uns darüber sprechen, wie Sie Workerman verwenden, um die Instant-Chat-Funktion zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!