1. 程式人生 > >WorkerMan的推送 新增到YII2

WorkerMan的推送 新增到YII2

在根目錄下新建Worker目錄
進入新建的Worker資料夾
執行
LINUX下執行 composer require workerman/workerman
win 下執行 composer require workerman/workerman-for-win

Worker資料夾 下新建檔案push.php

<?php
//require_once DIR .'/vendor/autoload.php';
require_once DIR .'/vendor/workerman/workerman/Autoloader.php';
// require_once DIR .'/vendor/workerman/workerman-for-win/Autoloader.php'; WIN下的引用
use Workerman\Worker;
//
// 初始化一個worker容器,監聽1234埠
$worker = new Worker('websocket://192.168.85.128:1234');
// 這裡程序數必須設定為1
$worker->count = 1;
// worker程序啟動後建立一個內部通訊埠
$worker->onWorkerStart = function($worker)
{

// 開啟一個內部埠,方便內部系統推送資料,Text協議格式 文字+換行符
$inner_text_worker = new Worker('Text://192.168.85.128:5678');
$inner_text_worker->onMessage = function($connection, $buffer)
{
    global $worker;
    // $data陣列格式,裡面有uid,表示向那個uid的頁面推送資料
    $data = json_decode($buffer, true);
    $uid = $data['uid'];
    // 通過workerman,向uid的頁面推送資料
$ret = sendMessageByUid($uid, $buffer); // 返回推送結果 $connection->send($ret ? 'ok' : 'fail'); }; $inner_text_worker->listen();

};
// 新增加一個屬性,用來儲存uid到connection的對映
$worker->uidConnections = array();
// 當有客戶端發來訊息時執行的回撥函式
$worker->onMessage = function($connection, $data)use($worker)
{

// 判斷當前客戶端是否已經驗證,既是否設定了uid
if(!isset($connection->uid)) { // 沒驗證的話把第一個包當做uid(這裡為了方便演示,沒做真正的驗證) $connection->uid = $data; /* 儲存uid到connection的對映,這樣可以方便的通過uid查詢connection, * 實現針對特定uid推送資料 */ $worker->uidConnections[$connection->uid] = $connection; return; }

};

// 當有客戶端連線斷開時
$worker->onClose = function($connection)use($worker)
{

global $worker;
if(isset($connection->uid))
{
    // 連線斷開時刪除對映
    unset($worker->uidConnections[$connection->uid]);
}

};

// 向所有驗證的使用者推送資料
function broadcast($message)
{

global $worker;
foreach($worker->uidConnections as $connection)
{
    $connection->send($message);
}

}

// 針對uid推送資料
function sendMessageByUid($uid, $message)
{

global $worker;
if(isset($worker->uidConnections[$uid]))
{
    $connection = $worker->uidConnections[$uid];
    $connection->send($message);
    return true;
}
return false;

}

// 執行所有的worker(其實當前只定義了一個)
Worker::runAll();

http://www.yiichina.com/extension/1206

相關推薦

WorkerMan 新增YII2

在根目錄下新建Worker目錄 進入新建的Worker資料夾 執行 LINUX下執行 composer require workerman/workerman win 下執行 composer require workerman/workerman-for-win Work

【Git】常用命令commit提交,push,merge,新增分支branch

1.常用操作: 1.新增跟蹤檔案 git add . 或 git add -A 根據ignore的配置,新增跟蹤檔案,其中的.或-A表示新增所有更改過的檔案。 2.檢視狀態 git status 3.提交到本地: git commit -m "說明"

【轉 】workerman 實現訊息

WEB訊息推送框架 web-msg-sender是一款web長連線推送框架,採用PHPSocket.IO開發,基於WebSocket長連線通訊,如果瀏覽器不支援WebSocket則自動轉用comet推送。 通過後臺推送訊息,訊息可以即時推送到客戶端,非輪詢

基於workerman的叢集例子

本文轉自:http://doc3.workerman.net/component/channel-examples.html 例子1 (要求Workerman版本>=3.3.0) 基於Worker的多程序(分散式叢集)推送系統 start.php <?php

使用workerman進行訊息

Workerman是一款純PHP開發的開源高效能的PHP socket 伺服器框架。被廣泛的用於手機app、移動通訊,微信小程式,手遊服務端、網路遊戲、PHP聊天室、硬體通訊、智慧家居、車聯網、物聯網等領域的開發。 支援TCP長連線,支援Websocket、HT

Fork原專案新增分支的同步和

在 Github 或者 Gitlab Fork 專案以後,原專案增加了新的分支,我們可以通過以下流程將分支同步下來 本專案前提假設我們設定了 remote 的名稱為 up 與源專案關聯. $ git remote -v origin [email&

Workerman之WEB訊息框架使用筆記【一】

伺服器使用的時候需要注意雲盾和360埠攔截 下載解壓到任意目錄 cd到目錄下執行 start.php linux :php start.php start -d win:直接執行start_

workerman 從伺服器端向用戶端訊息程式碼

資料推送 <?php $client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1); // 推送的資料,包含使用者,表示是給這個使用者推送 $data = array('uid'

自定義聲音需要如何新增到APP才會響?

之前做的專案,現在需要新增新的功能,推送是響自定義聲音,由於用的是mqtt做的推送,所以在專案中使用本地推送來模擬推送的效果。 以前用極光推送時,直接將檔案新增到專案中,通過解析到內容來響不同自定義聲音。這次按照之前的做法做了,但是測試時發現不響le,反覆查詢沒有找到問題,

Notification API,為你的網頁新增桌面通知

Notification 是什麼 MDN: Notifications API 的 Notification 介面用於配置和向用戶顯示桌面通知。這些通知的外觀和特定功能因平臺而異,但通常它們提供了一種向用戶非同步提供資訊的方式。 其實,MDN 的說明已經可以讓我們很清楚知道 Notification 的

為Github倉庫新增Github Actions實現持續整合: Android apk自動編譯釋出以及github pages同步coding.net

> 內容轉載自[我的部落格](https://blog.whuzfb.cn/blog/2020/08/09/github_actions/) [TOC] ## 說明 對於普通的github倉庫,只需要在根目錄建立`.github/workflows/`資料夾即可自動使用Actions功能,具體執行的操

C# 模板

doc -1 ges cnblogs images title src target 個推 C#推送模板、安卓個推、消息推送 http://docs.getui.com/server/csharp/template/ C# 推送模板

消息二 之webSocket

還需 由於 else har 頁面 try window class logs 友情提示: 消息推送的介紹可以參考http://www.cnblogs.com/dahuandan/p/6816173.html 什麽是webSocket webSocket是為解決客

極光---安卓Demo

ges 網絡 同名 roi sta 復制 ava tro return 對於一個一直幹.net的程序媛來說。冷不丁的讓小編幹安卓,那種感覺就好似小狗狗咬小刺猬一樣,不知道從哪兒開始下手,對於小編來說。既是挑戰更是機遇,由於知識都是相通的。再者來說,在小編的

基於netty-socketio的web服務

hub href 相關 發生 推送消息 數據 特定 使用 github   在WEB項目中,服務器向WEB頁面推送消息是一種常見的業務需求。PC端的推送技術可以使用socket建立一個長連接來實現。傳統的web服務都是客戶端發出請求,服務端給出響應。但是現在直觀的要求是允許

Git總結筆記3-把本地倉庫到github

-c don gin 目的 commit 筆記 pre git from 說明:此筆記在centos 7 上完成 1.配置公鑰 [[email protected]/* */ ~]# ssh-keygen -t rsa -C "[email 

ios 開發 消息的設置

adg 一個 iap ger uia oid style default play ///註銷推送 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 20.0px Menlo; color: #587ea8 } span.s1 {

GoBelieve IM 消息的方案

apn dem 所有 消息 做的 pan 切換 賬戶 mic 消息推送設計方案如下: 所有接入im SDK的deviceTOken都會存儲到IM服務器。就可以 IM服務器來根據你們服務器指定的useId來下發消息。判斷客戶端在線,並且APP在前臺。就是socket下發,IM

業務的邏輯設計

jpg 消息通道 消息流 負責 語言 自己 較高的 狀態 整合 項目上線至今已有1年左右的時間了,回頭查看自己以前寫的比較low的東西,感覺確實可笑,但是當時也是形勢所迫嘛。 現在為止,東西已經基本完善,不能說有多好吧,支持現在業務量肯定是沒有問題的。 梳理以前東西的時候,

iOS開發——遠程消息的實現

ice 分享 mit load con targe you 取消 tex 在我們使用App的過程中。總是會收到非常多的消息推送。今天我們就要來實現這個功能。首先消息推送分為本地消息推送和遠程消息推送。而當中又以遠程消息最為經常使用。可是在推送遠程消息之前。