å端代ç
push.php
<?php
use Workerman\Worker;
require_once './Workerman/Autoloader.php';
// åå§åä¸ä¸ªworker容å¨ï¼çå¬1234端å£
$worker = new Worker('websocket://0.0.0.0:1234');
// è¿éè¿ç¨æ°å¿
须设置为1
$worker->count = 1;
// workerè¿ç¨å¯å¨å建ç«ä¸ä¸ªå
é¨é讯端å£
$worker->onWorkerStart = function($worker)
{
// å¼å¯ä¸ä¸ªå
é¨ç«¯å£ï¼æ¹ä¾¿å
é¨ç³»ç»æ¨éæ°æ®ï¼Textåè®®æ ¼å¼ ææ¬+æ¢è¡ç¬¦
$inner_text_worker = new Worker('Text://0.0.0.0: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();
å¯å¨å端æå¡
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è¿æ¥å°å
é¨æ¨é端å£
$client = stream_socket_client('tcp://127.0.0.1:5678', $errno, $errmsg, 1, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT);
// æ¨éçæ°æ®ï¼å
å«uidå段ï¼è¡¨ç¤ºæ¯ç»è¿ä¸ªuidæ¨é
$data = array('uid'=>'uid1', 'percent'=>'88%');
// åéæ°æ®ï¼æ³¨æ5678端å£æ¯Textåè®®ç端å£ï¼Textåè®®éè¦å¨æ°æ®æ«å°¾å ä¸æ¢è¡ç¬¦
fwrite($client, json_encode($data)."\n");
// 读åæ¨éç»æ
echo fread($client, 8192);
è¿éçuidä¸ä¸å®æ¯ç¨æ·çidï¼ä¹å¯ä»¥ç解为任å¡idå³ taskid
以ä¸ä»£ç 亲æµå¯ä»¥ç´æ¥ä½¿ç¨
温馨提示:答案为网友推荐,仅供参考