真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

php百萬(wàn)推送數(shù)據(jù) php百萬(wàn)數(shù)據(jù)查詢優(yōu)化

如何在php后端及時(shí)推送消息給客戶端

后端代碼

創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的安平網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

push.php

?php

use Workerman\Worker;

require_once './Workerman/Autoloader.php';

// 初始化一個(gè)worker容器,監(jiān)聽(tīng)1234端口

$worker = new Worker('websocket://0.0.0.0:1234');

// 這里進(jìn)程數(shù)必須設(shè)置為1

$worker-count = 1;

// worker進(jìn)程啟動(dòng)后建立一個(gè)內(nèi)部通訊端口

$worker-onWorkerStart = function($worker)

{

// 開(kāi)啟一個(gè)內(nèi)部端口,方便內(nèi)部系統(tǒng)推送數(shù)據(jù),Text協(xié)議格式 文本+換行符

$inner_text_worker = new Worker('Text://0.0.0.0:5678');

$inner_text_worker-onMessage = function($connection, $buffer)

{

global $worker;

// $data數(shù)組格式,里面有uid,表示向那個(gè)uid的頁(yè)面推送數(shù)據(jù)

$data = json_decode($buffer, true);

$uid = $data['uid'];

// 通過(guò)workerman,向uid的頁(yè)面推送數(shù)據(jù)

$ret = sendMessageByUid($uid, $buffer);

// 返回推送結(jié)果

$connection-send($ret ? 'ok' : 'fail');

};

$inner_text_worker-listen();

};

// 新增加一個(gè)屬性,用來(lái)保存uid到connection的映射

$worker-uidConnections = array();

// 當(dāng)有客戶端發(fā)來(lái)消息時(shí)執(zhí)行的回調(diào)函數(shù)

$worker-onMessage = function($connection, $data)use($worker)

{

// 判斷當(dāng)前客戶端是否已經(jīng)驗(yàn)證,既是否設(shè)置了uid

if(!isset($connection-uid))

{

// 沒(méi)驗(yàn)證的話把第一個(gè)包當(dāng)做uid(這里為了方便演示,沒(méi)做真正的驗(yàn)證)

$connection-uid = $data;

/* 保存uid到connection的映射,這樣可以方便的通過(guò)uid查找connection,

* 實(shí)現(xiàn)針對(duì)特定uid推送數(shù)據(jù)

*/

$worker-uidConnections[$connection-uid] = $connection;

return;

}

};

// 當(dāng)有客戶端連接斷開(kāi)時(shí)

$worker-onClose = function($connection)use($worker)

{

global $worker;

if(isset($connection-uid))

{

// 連接斷開(kāi)時(shí)刪除映射

unset($worker-uidConnections[$connection-uid]);

}

};

// 向所有驗(yàn)證的用戶推送數(shù)據(jù)

function broadcast($message)

{

global $worker;

foreach($worker-uidConnections as $connection)

{

$connection-send($message);

}

}

// 針對(duì)uid推送數(shù)據(jù)

function sendMessageByUid($uid, $message)

{

global $worker;

if(isset($worker-uidConnections[$uid]))

{

$connection = $worker-uidConnections[$uid];

$connection-send($message);

return true;

}

return false;

}

// 運(yùn)行所有的worker(其實(shí)當(dāng)前只定義了一個(gè))

Worker::runAll();

啟動(dòng)后端服務(wù)

php push.php start -d

前端接收推送的js代碼

var ws = new WebSocket('ws://127.0.0.1:1234');

ws.onopen = function(){

var uid = 'uid1';

ws.send(uid);

};

ws.onmessage = function(e){

alert(e.data);

};

后端推送消息的代碼

// 建立socket連接到內(nèi)部推送端口

$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT);

// 推送的數(shù)據(jù),包含uid字段,表示是給這個(gè)uid推送

$data = array('uid'='uid1', 'percent'='88%');

// 發(fā)送數(shù)據(jù),注意5678端口是Text協(xié)議的端口,Text協(xié)議需要在數(shù)據(jù)末尾加上換行符

fwrite($client, json_encode($data)."\n");

// 讀取推送結(jié)果

echo fread($client, 8192);

這里的uid不一定是用戶的id,也可以理解為任務(wù)id即 taskid

以上代碼親測(cè)可以直接使用

如何利用php數(shù)組對(duì)百萬(wàn)數(shù)據(jù)進(jìn)行排重

如果你已經(jīng)使用了一段時(shí)間PHP的話,那么,你應(yīng)該已經(jīng)對(duì)它的數(shù)組比較熟悉了——這種數(shù)據(jù)結(jié)構(gòu)允許你在單個(gè)變量中存儲(chǔ)多個(gè)值,并且可以把它們作為一個(gè)集合進(jìn)行操作。

經(jīng)常,開(kāi)發(fā)人員發(fā)現(xiàn)在PHP中使用這種數(shù)據(jù)結(jié)構(gòu)對(duì)值或者數(shù)組元素進(jìn)行排序非常有用。PHP提供了一些適合多種數(shù)組的排序函數(shù),這些函數(shù)允許你在數(shù)組內(nèi)部對(duì)元素進(jìn)行排列,也允許用很多不同的方法對(duì)它們進(jìn)行重新排序。在這篇文章中我們將討論該排序中最重要的幾個(gè)函數(shù)。

簡(jiǎn)單排序

首先,讓我們來(lái)看看最簡(jiǎn)單的情況:將一個(gè)數(shù)組元素從低到高進(jìn)行簡(jiǎn)單排序,這個(gè)函數(shù)既可以按數(shù)字大小排列也可以按字母順序排列。PHP的sort()函數(shù)實(shí)現(xiàn)了這個(gè)功能,如Listing A所示:

Listing A

?php

? $data = array(5,8,1,7,2);

? sort($data);

? print_r($data);

? ?

輸出結(jié)果如下所示:

Array ([0] = 1

[1] = 2

[2] = 5

[3] = 7

[4] = 8

)

PHP導(dǎo)出100萬(wàn)數(shù)據(jù)到excel

php導(dǎo)出數(shù)據(jù)excel有專(zhuān)門(mén)的庫(kù),當(dāng)導(dǎo)出少量數(shù)據(jù)的時(shí)候速度很快,但是當(dāng)數(shù)據(jù)量大的時(shí)候就會(huì)存在服務(wù)器內(nèi)存不夠之類(lèi)的。

所以在導(dǎo)出大量數(shù)據(jù)的時(shí)候就應(yīng)該分頁(yè)查詢數(shù)據(jù),避免服務(wù)器宕機(jī)。正好PHP提供了fputcsv函數(shù)可以將數(shù)據(jù)寫(xiě)入到csv文件中。

這樣我們就可以使用PHP對(duì)數(shù)據(jù)進(jìn)行分頁(yè)查詢,再寫(xiě)入到csv文件中。


網(wǎng)頁(yè)標(biāo)題:php百萬(wàn)推送數(shù)據(jù) php百萬(wàn)數(shù)據(jù)查詢優(yōu)化
文章地址:http://weahome.cn/article/dddpgcj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部