Heim > PHP-Framework > Workerman > So verwenden Sie Workerman für den Nachrichten-Push

So verwenden Sie Workerman für den Nachrichten-Push

藏色散人
Freigeben: 2021-02-01 12:07:26
nach vorne
4494 Leute haben es durchsucht

In der folgenden Spalte des Workerman-Tutorials erfahren Sie, wie Sie Workerman zum Versenden von Nachrichten verwenden können. Ich hoffe, dass es Freunden in Not hilfreich sein wird!

So verwenden Sie Workerman für den Nachrichten-Push

Workerman ist ein Open-Source-Hochleistungs-PHP-Socket-Server-Framework, das rein in PHP entwickelt wurde. Es wird häufig in der Entwicklung mobiler Apps, mobiler Kommunikation, WeChat-Applets, mobiler Spieleserver, Online-Spiele, PHP-Chatrooms, Hardware-Kommunikation, Smart Homes, Internet der Fahrzeuge, Internet der Dinge und anderen Bereichen eingesetzt.

Unterstützt lange TCP-Verbindungen, unterstützt Websocket, HTTP und andere Protokolle sowie benutzerdefinierte Protokolle. Es verfügt über viele leistungsstarke Komponenten wie asynchrones MySQL, asynchrones Redis, asynchrones HTTP, asynchrone Nachrichtenwarteschlange usw. Ähnliche sind Swoole und MeepoPS.

Laden Sie zunächst das Web-Nachrichten-Push-System web-msg-sender von workerman herunter.

# wget http://www.workerman.net/download/senderzip
# unzip senderzip
#cd web-msg-sender 
#vim start.php
Nach dem Login kopieren
rrree

Speichern

use Workerman\Worker;
// composer 的 autoload 文件
include __DIR__ . '/vendor/autoload.php';
if(strpos(strtolower(PHP_OS), 'win') === 0)
{
    exit("start.php not support windows, please use start_for_win.bat\n");
}
// 标记是全局启动
define('GLOBAL_START', 1);
// 加载IO 和 Web
require_once __DIR__ . '/start_io.php';
可以注释掉 webServer 服务 没什么用  省点资源
// require_once __DIR__ . '/start_web.php';
// 运行所有服务
Worker::runAll();
Nach dem Login kopieren

Die Push-Klasse, die ich verwende, ist tp5

#vim start_io.php
找到 将端口改成你要监听的端口 我是2120 记住要在安全组里入方向添加白名单
// PHPSocketIO服务 
$sender_io = new SocketIO(2120);
服务端设置完毕后
#php start.php start -d //开启服务 并保持进程
Nach dem Login kopieren

Operation Controller

<?php
namespace app\index\moudel; 
/**
 * 推送事件
 * 典型调用方式:
 * $push = new WebSocket();
 * $push->setUser($user_id)->setContent($string)->push();//连贯操作
 *
 * Class WebSocket
 * @package app\index\moudel; 
 */
class WebSocket
{
    /**
     * @var string 目标用户id
     */
    protected $to_user = &#39;&#39;;
    /**
     * @var string 推送服务地址 
     */
    protected $push_api_url = &#39;http://127.0.0.1:2000&#39;;
    /**
     * @var string 推送内容
     */
    protected $content = &#39;&#39;;
    /**
     * 设置推送用户,若参数留空则推送到所有在线用户
     *
     * @param string $user
     * @return $this
     */
    public function setUser($user = &#39;&#39;)
    {
        $this->to_user = $user ? : &#39;&#39;;
        return $this;
    }
    /**
     * 设置推送内容
     *
     * @param string $content
     * @return $this
     */
    public function setContent($content = &#39;&#39;)
    {
        $this->content = $content;
        return $this;
    }
    /**
     * 推送
     */
    public function push()
    {
        $data = [
            &#39;type&#39; => &#39;publish&#39;,
            &#39;content&#39; => $this->content,
            &#39;to&#39; => $this->to_user,
        ];
        // var_dump($data);
        // var_dump($this->push_api_url);
        $ch = curl_init ();
        curl_setopt($ch, CURLOPT_URL, $this->push_api_url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_HEADER, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array(&#39;Expect:&#39;));
        $res = curl_exec($ch);
        curl_close($ch);
        dump($res);
    }
}
Nach dem Login kopieren

Die Front-End-Anzeige des Push-Ziels

<?php
namespace app\index\controller;
use think\Controller;
use app\index\moudel\WebSocket;
class Index extends Controller
{
 /**
     * 推送一个字符串
     */
    public function push_msg(){
        $uid = input(&#39;uid&#39;,&#39;&#39;);//uid为空的时候推送给所有用户
        $string = &#39;这是一个推送的测试&#39;;
        $string = input(&#39;msg&#39;) ? : $string;
        $push = new WebSocket();
        $push->setUser($uid)->setContent($string)->push();
    }
    /**
     * 推送目标页
     *
     * @return \think\response\View
     */
    public function targetPage(){
        return view();
    }
}
Nach dem Login kopieren
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<strong id="count"></strong>
<h1 id="target"></h1>
</body>
</html>
<script src="http://cdn.bootcss.com/jquery/3.1.0/jquery.min.js"></script>
<script src=&#39;http://cdn.bootcss.com/socket.io/1.3.7/socket.io.js&#39;></script>
<script>
    jQuery(function ($) {
        // 连接服务端
        var socket = io(&#39;http://39.106.132.216:2000/&#39;); //这里当然填写真实的地址了
        // uid可以是自己网站的用户id,以便针对uid推送以及统计在线人数,但一定是唯一标识
        uid = 321;
        // socket连接后以uid登录
        socket.on(&#39;connect&#39;, function () {
            socket.emit(&#39;login&#39;, uid);
        });
        // 后端推送来消息时
        socket.on(&#39;new_msg&#39;, function (msg) {
            console.log("收到消息:" + msg);
            $(&#39;#target&#39;).append(msg).append(&#39;<br>&#39;);
        });
        // 后端推送来在线数据时
        socket.on(&#39;update_online_count&#39;, function (online_stat) {
            console.log(online_stat);
            $(&#39;#count&#39;).html(online_stat);
        });
    })
</script>
Nach dem Login kopieren

Das Frontend zeigt erfolgreich 321 als meine benutzerdefinierte UID an

So verwenden Sie Workerman für den Nachrichten-Push

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Workerman für den Nachrichten-Push. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage