webstock php,workerman_connection

workerman_connection 測試WebStock 功能

Description

整理PHP 實現webstock 功能的相關流程。感謝workerman 開發作者提供開源組件。

安裝 composer

# curl -sS https://getcomposer.org/installer | php

如果安裝 composer 提示PHP 版本不夠按照如下處理,否則跳過。

提示版本不夠,現在是5.3.3 只好準備升級到5.6

先進行卸載舊版本。

# yum list installed | grep php

# yum remove php.x86_64 php-cli.x86_64 php-common.x86_64 php-fpm.x86_64 php-gd.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysql.x86_64 php-pdo.x86_64 php-xml.x86_64 刪掉顯示出來的所有組件

接下來安裝PHP5.6

# rpm -Uvh https://mirror.webtatic.com/yum/el6/latest.rpm 升級一下yum 工具

# yum clean all 清除

# yum install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-fpm.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64 php56w-xml.x86_64

驗證安裝版本

# php -v (顯示 5.6.35)

# /etc/init.d/php-fpm restart 重新啟動

安裝WebStock 所需要的組件

安裝前檢查很重要

# curl -Ss http://www.workerman.net/check.php|php 檢查缺啥

PHP Version >= 5.3.3 [OK]

Extension pcntl check [OK]

Extension posix check [fail] (缺啥補啥)

補充缺少的部分

# yum install php56w-process 安裝缺少的 posix

# mv composer.phar /usr/local/bin/composer 讓命令全局調用

# cd (切換到項目目錄)

安裝:workerman

# composer require workerman/workerman

安裝:gateway-worker

# composer require workerman/gateway-worker

代碼測試

下載本項目的文件,這里假設你防止的目錄是網站根目錄下 ws 文件夾中。

配置

配置 ws/start_businessworker.php BusinessWorker類其實也是基于基礎的Worker開發的。BusinessWorker是運行業務邏輯的進程,BusinessWorker收到Gateway轉發來的事件及請求時會默認調用Events.php中的onConnect、onMessage、onClose方法處理事件及數據,開發者正是通過實現這些回調控制業務及流程。

$worker->name 是你的工作進程名稱,隨便起名即可別重名

$worker->registerAddress 是webstock 服務器的地址,目標指向你的webstock 服務器,這個在分布式處理需要注意,這里都在一臺主機上測試,所以IP為127.0.0.1

其他不用改,不要動,保存退出

舉例

use \Workerman\Worker;

use \Workerman\WebServer;

use \GatewayWorker\Gateway;

use \GatewayWorker\BusinessWorker;

use \Workerman\Autoloader;

// bussinessWorker 進程

$worker = new BusinessWorker();

// worker名稱

$worker->name = 'YourAppBusinessWorker';

// bussinessWorker進程數量

$worker->count = 4;

// 服務注冊地址

$worker->registerAddress = '127.0.0.1:2346';

// 如果不是在根目錄啟動,則運行runAll方法

if(!defined('GLOBAL_START')) {

Worker::runAll();

}

配置 ws/start_gateway.php Gateway類用于初始化Gateway進程。Gateway進程是暴露給客戶端的讓其連接的進程。所有客戶端的請求都是由Gateway接收然后分發給BusinessWorker處理

$gateway->name

$gateway->count

$gateway->lanIp

$gateway->startPort

$gateway->registerAddress

$gateway->pingInterval

$gateway->pingData

直接看注釋吧。

use \Workerman\Worker;

use \Workerman\WebServer;

use \GatewayWorker\Gateway;

use \GatewayWorker\BusinessWorker;

use \Workerman\Autoloader;

// gateway 進程,這里使用Text協議,可以用telnet測試

$gateway = new Gateway("websocket://0.0.0.0:2345");

// 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:2346';

// 心跳間隔

$gateway->pingInterval = 20;

// 心跳數據

$gateway->pingData = '{"type":"ping"}';

配置 ws/start_register.php Register類其實也是基于基礎的Worker開發的。Gateway進程和BusinessWorker進程啟動后分別向Register進程注冊自己的通訊地址,Gateway進程和BusinessWorker通過Register進程得到通訊地址后,就可以建立起連接并通訊了。

要修改的只有text 協議地址,這里面要和

use \Workerman\Worker;

use \GatewayWorker\Register;

// register 服務必須是text協議

$register = new Register('text://0.0.0.0:2346');

// 如果不是在根目錄啟動,則運行runAll方法

if(!defined('GLOBAL_START')) {

Worker::runAll();

}

邏輯工作原理

1.Register、Gateway、BusinessWorker進程啟動

2.Gateway、BusinessWorker進程啟動后向Register服務進程發起長連接注冊自己

3.Register服務收到Gateway的注冊后,把所有Gateway的通訊地址保存在內存中

4.Register服務收到BusinessWorker的注冊后,把內存中所有的Gateway的通訊地址發給BusinessWorker

5.BusinessWorker進程得到所有的Gateway內部通訊地址后嘗試連接Gateway

6.如果運行過程中有新的Gateway服務注冊到Register(一般是分布式部署加機器),則將新的Gateway內部通訊地址列表將廣播給所有BusinessWorker,BusinessWorker收到后建立連接

7.如果有Gateway下線,則Register服務會收到通知,會將對應的內部通訊地址刪除,然后廣播新的內部通訊地址列表給所有BusinessWorker,BusinessWorker不再連接下線的Gateway

8.至此Gateway與BusinessWorker通過Register已經建立起長連接

9.客戶端的事件及數據全部由Gateway轉發給BusinessWorker處理,BusinessWorker默認調用Events.php中的onConnect onMessage onClose處理業務邏輯。

10.BusinessWorker的業務邏輯入口全部在Events.php中,包括onWorkerStart進程啟動事件(進程事件)、onConnect連接事件(客戶端事件)、onMessage消息事件(客戶端事件)、onClose連接關閉事件(客戶端事件)、onWorkerStop進程退出事件(進程事件)

56e56b160f80f42daab45be263dc4cae.png

執行測試

進入服務器的ws 目錄下

php start.php start 這會啟動所有服務

啟動后截圖

198bbee13b27e74089acab8ac53f338b.png

控制臺截圖

cbc59d748f78f5a855d6e47b1249d9e8.png

里面會生成一個假的OPEN-ID 這個OPEN-ID 用來溝通這個用戶的客戶端“OPENID_1539063500148”

查看客戶端控制臺

6922f614d1fc1c15ceffeabc62f683e9.png

看到消息表示測試成功。

特別說明

send_message.php 中的代碼實際上放到任何框架下都可以執行,這個完美的進行了解耦操作。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/273085.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/273085.shtml
英文地址,請注明出處:http://en.pswp.cn/news/273085.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

短信通信的幾種情況和CMS錯誤

1. 如何與GSM MODEM建立通信聯系 2. 不能與GSM MODEM進行正常的通信或總是在仿真終端上出現亂碼 3. 如何才能知道錯誤代碼 4. 發送短消息后,收到出錯信息CMS ERROR 512 5. 發送短消息后,收到出錯…

php+管道+pipe管道,angular2+管道pipe

一.什么是Pipe?就是管道,簡單來說,管道的作用就是傳輸。并且不同的管道具有不同的作用。(其實就是處理數據)二.pipe用法{{ 輸入數據 | 管道 : 管道參數}} (其中‘|’是管道操作符)三.Angular自帶的pipe函數管道功能DatePipe 日期管道,格式…

[字符串]與[數組]的互相轉換

1.字符串轉換為數組 var a"1,2,3";var ba.split(,); 2.數組轉換為字符串 var c[1,2,3];var dc.join(,); 轉載于:https://www.cnblogs.com/zqzjs/p/4693849.html

java android 界面設計,Android精美登錄界面設計

在網上在到一個登錄界面感覺挺不錯的,給大家分享一下~先看效果圖:這個Demo除了按鈕、小貓和Logo是圖片素材之外,其余的UI都是通過代碼實現的。一、背景背景藍色漸變,是通過一個xml文件來設置的。代碼如下:background_l…

linux查看文件大小

du -s [文件名] du -sh [文件名] ls -lh [文件名]轉載于:https://www.cnblogs.com/chenqionghe/p/4694070.html

jmeter java接口,jmeter并發測試java接口 | 學步園

Sample這里我用到主要JMeter的線程和報表,擴展了他的“Java請求”這個應用類別。要擴展此應用,要用到lib/ext/ApacheJMeter_java.jar,他封裝此應用。首先,需要繼承ApacheJMeter_java.jar中的抽象類AbstractJavaSamplerClient,它提…

Web項目練習總結(錯誤校正篇)

老師布置任務,從SVN上弄個項目來練練手,熟悉下過程。 myeclipse安裝SVN 然后把MobileManageSys下下來 然后漫長的等待。。。 然后配置數據庫,導入,這里用的是SQLyog,其他的也可以 之后這里會產生一大堆的錯誤&#xff…

php 網格,PHP中的數據網格

你可以使用http://phpgrid.com$dg new C_DataGrid("SELECT * FROM orders", "orderNumber", "orders");// change column titles$dg->set_col_title("orderNumber", "Order No.");$dg->set_col_title("orderDat…

matlab常用隸屬度函數,常用隸屬函數.ppt

模糊集基本理論 典型隸屬函數 如前所述, 構造恰當的隸屬函數是模糊集理論應用的基礎。一種基本的構造隸屬函數的方法是“參考函數法”, 即參考一些典型的隸屬函數, 通過選擇適當的參數, 或通過擬合、整合、實驗等手段得到需要的隸屬函數。 下面介紹典型隸屬函數(最早由法國學者…

適配器模式的應用

1.適配源類:java.util.Properties 2.適配目標類:FileIO 3.適配器 FileProperties package fileio;import java.io.IOException;public interface FileIO {public void readFromFile(String fileName) throws IOException;public void writeToFile(String…

nginx php7提速,nginx+php7-fpm 性能提升幾倍跟蹤實踐結果并優化

nginxphp7-fpm 性能提升幾倍跟蹤實踐結果并優化nginxphp7-fpm 性能提升幾倍,跟蹤實踐結果并優化歷史ubuntu服務器使用的apachephp5,現在使用nginuxphp7-fpm方式,看效果圖,啥也不說了。強烈推薦升級到php7,當然升級中基…

Where條件的in里面放太多數據導致很慢

比如:select * from TableA where ID in (42,216,219,230,231,220,249,250,221,251,252,217,253,255,256,254,257,258,1804) 52W數據,查詢速度19386ms,好慢怎么辦?程序都卡死了。 那么試一下百度搜索到的優化方式? 1.將…

inur new.php id,Cmsez(隨易)全站系統注入0day

allinurl:"owered by CMSEZ" comments.php inurlowered by CMSEZ//commentsinclude "mainfile.php";$artnew article();//設定$confirmyes;//yes:需要管理員認證后才能顯示,no:直接顯示$membernew member();$user_info$member->member_auth();$ulevel$u…

matlab地球衛星模型,地球衛星三維運行軌道MATLAB仿真

地球衛星三維運行軌道MATLAB仿真1、問題的描述3 軌道上運行的地球衛星,根據牛頓第二定律Fma以及萬有引力定律F-GmME*r/r,3可得a-GME*r/r,即x -GME*x/r3 3 y -GME*y/r; z -GM*z/r3E (1)式中,(x,y,z)表示衛星…

LeetCode 3. Longest Substring Without Repeating Characters

原題鏈接在這里:https://leetcode.com/problems/longest-substring-without-repeating-characters/ 題目: Given a string, find the length of the longest substring without repeating characters. For example, the longest substring without repea…

The mook jong 計數DP

The mook jong ZJiaQ為了強身健體,決定通過木人樁練習武術。ZJiaQ希望把木人樁擺在自家的那個由1*1的地磚鋪成的1*n的院子里。由于ZJiaQ是個強迫癥,所以他要把一個木人樁正好擺在一個地磚上,由于木人樁手比較長,所以兩個木人樁之間…

java executequery,JDBC中的execute(),executeQuery()和executeUpdate()方法有什么區別?

一旦你創建了Statement對象可以使用的即聲明接口的執行方法之一執行它,execute(),executeUpdate()和executeQuery()。的execute()方法:該方法是用于執行SQL DDL語句,它返回一個布爾值,指定的天氣ResultSet對象可以被檢…

ThinkPHP- 3.1

基礎: 1. 基礎概念 LAMP LAMP是基于Linux,Apache,MySQL和PHP的開放資源網絡開發平臺。這個術語來自歐洲,在那里這些程序常用來作為一種標準開發環境。名字來源于每個程序的第一個字母。每個程序在所有權里都符合開放源代碼標準&am…

java 判斷域密碼到期提醒,Exchange Server 2010下,檢測用戶密碼到期通知提醒腳本...

#############################################Author:wangtingdong#For:檢測AD密碼過期時間并郵件通知#Version:1.0##############################################Import-Module Activedirectory#1和2選擇一個執行#1檢索出指定OU里不包含設置了永不過期及禁用的賬戶#$allad…

php中定義css樣式的好處,CSS的優點和缺點分別是什么

CSS的優點有:豐富的樣式定義、易于修改、結構清晰、多頁面使用等;CSS的缺點:瀏覽器支持不一樣具有兼容性、不能明確指定繼承性CSS的主要哦作用是為HTML頁面添加樣式,使得頁面更加美觀。接下來在文章中將為大家詳細介紹CSS的優點與…