検索
ホームページPHPフレームワークWorkermanメッセージプッシュにワーカーマンを使用する方法

次のコラム workerman チュートリアルでは、workerman を使用してメッセージをプッシュする方法を紹介します。困っている友人の役に立てば幸いです。

メッセージプッシュにワーカーマンを使用する方法

Workerman は、純粋に PHP で開発されたオープンソースの高性能 PHP ソケット サーバー フレームワークです。モバイル アプリ、モバイル通信、WeChat アプレット、モバイル ゲーム サーバー、オンライン ゲーム、PHP チャット ルーム、ハードウェア通信、スマート ホーム、車両のインターネット、モノのインターネット、その他の分野の開発で広く使用されています。

TCP 長い接続をサポートし、Websocket、HTTP およびその他のプロトコルをサポートし、カスタム プロトコルをサポートします。非同期 Mysql、非同期 Redis、非同期 Http、非同期メッセージ キューなど、多くの高性能コンポーネントを備えています。同様のものには swoole や MeepoPS などがあります。

まず、workerman の Web メッセージ プッシュ システム web-msg-sender をダウンロードします。

# wget http://www.workerman.net/download/senderzip
# unzip senderzip
#cd web-msg-sender 
#vim start.php
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();

保存

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

使用するプッシュクラスはtp5です

<?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);
    }
}

操作コントローラ

<?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();
    }
}

プッシュターゲットのフロントエンド表示

<!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>
http://我自己的域名/index/index/pushAString?uid=123
ok 为推送成功
offline 为未在线
fail 为失败

フロントエンドは、カスタマイズされた uid として 321 を正常に表示します。

メッセージプッシュにワーカーマンを使用する方法

以上がメッセージプッシュにワーカーマンを使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はcsdnで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
workerman和swoole性能谁更好?如何选择?workerman和swoole性能谁更好?如何选择?Dec 01, 2022 am 10:00 AM

workerman 对比 swoole 实际开发项目中,你会选择哪个?对于新手学哪个较好,有什么建议吗?

如何利用Workerman实现PHP和Unity3D的跨平台游戏联机功能如何利用Workerman实现PHP和Unity3D的跨平台游戏联机功能Jul 17, 2023 am 10:21 AM

如何利用Workerman实现PHP和Unity3D的跨平台游戏联机功能随着移动游戏的兴起,跨平台游戏联机功能成为游戏开发者关注的焦点之一。PHP作为一种广泛应用于Web开发的语言,而Unity3D作为一款强大的跨平台游戏引擎,如何实现二者之间的联机功能成为了开发者们思考的问题。本文将介绍如何利用Workerman实现PHP和Unity3D的跨平台游戏联机功

如何利用PHP和Unity3D开发基于Workerman的实时多人游戏如何利用PHP和Unity3D开发基于Workerman的实时多人游戏Jul 18, 2023 am 09:54 AM

如何利用PHP和Unity3D开发基于Workerman的实时多人游戏随着游戏行业的不断发展,实时多人游戏成为了一种趋势。而PHP作为一种广泛使用的服务器端脚本语言和Unity3D作为一种流行的游戏开发引擎,如果能够结合起来开发实时多人游戏,将会带来更加丰富的玩法和用户体验。本文将详细介绍如何利用PHP和Unity3D开发基于Workerman的实时多人游戏

PHP和Unity3D如何利用Workerman实现服务器端推送功能PHP和Unity3D如何利用Workerman实现服务器端推送功能Jul 18, 2023 pm 12:01 PM

PHP和Unity3D如何利用Workerman实现服务器端推送功能在现代的网络应用中,服务器端推送功能(ServerPush)显示了它的强大威力。它可以实时地将信息推送给客户端,而无需客户端不停地向服务器发起请求。在本文中,我们将讨论如何使用PHP和Unity3D结合使用Workerman框架来实现服务器端推送功能。Workerman是一个使用纯PHP编

如何使用Workerman实现PHP和Unity3D的数据统计和分析功能如何使用Workerman实现PHP和Unity3D的数据统计和分析功能Jul 16, 2023 pm 11:43 PM

如何使用Workerman实现PHP和Unity3D的数据统计和分析功能引言:随着互联网的快速发展,数据统计和分析变得愈发重要。在PHP和Unity3D开发过程中,我们经常需要收集和分析用户的行为数据,以便进行产品改进和决策制定。本文将介绍如何使用Workerman这个高性能的PHP开发框架实现PHP和Unity3D之间的数据统计和分析功能。一、Worker

如何使用Workerman实现PHP和Unity3D的多人协同编辑功能如何使用Workerman实现PHP和Unity3D的多人协同编辑功能Jul 17, 2023 pm 04:03 PM

如何使用Workerman实现PHP和Unity3D的多人协同编辑功能引言:在现如今的互联网时代,多人协同编辑已经成为一个非常重要和常见的功能需求。无论是团队合作中的文档编辑,还是多人在线游戏中的场景编辑,都需要实现多人同时编辑同一个文件或场景的功能。本文将介绍如何使用Workerman框架实现PHP和Unity3D的多人协同编辑功能,并提供代码示例。一、什

如何使用Workerman实现PHP和Unity3D的多人在线拼图游戏如何使用Workerman实现PHP和Unity3D的多人在线拼图游戏Jul 17, 2023 pm 10:55 PM

如何使用Workerman实现PHP和Unity3D的多人在线拼图游戏概述:多人在线游戏一直是游戏开发领域的一个热门话题,而拼图游戏作为一种简单、有趣的休闲游戏,也在线上游戏中广受欢迎。本文将介绍如何使用Workerman搭建服务器,并使用PHP和Unity3D开发一个简单的多人在线拼图游戏,实现实时的游戏互动。搭建服务器首先,我们需要搭建一个服务器来提供网

聊聊Laravel中怎么接入workerman聊聊Laravel中怎么接入workermanDec 07, 2022 pm 07:21 PM

laravel+websocket是即时通讯开发必备利器,那么Laravel中怎么接入workerman​?下面本篇文章给大家介绍一下laravel快速接入websocket的方法,希望对大家有所帮助。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境