public static $online = [];
public function index()
{
$context = array(
'ssl' => array(
'local_cert' => $_SERVER['DOCUMENT_ROOT'].'\lx.diguadou.com.cer',
'local_pk' => $_SERVER['DOCUMENT_ROOT'].'\lx.diguadou.com.key',
'verify_peer' => false,
)
);
// $io = new SocketIO(8282,$context);//socket的端口
$io = new SocketIO(8282);//socket的端口
$io->on('workerStart', function () use ($io) {
$inner_http_worker = new Worker('http://0.0.0.0:5880');
$inner_http_worker->onMessage = function ($http_connection, $data) use ($io) {
// isset(static::$online[$data->post('uid')]);
$adc["code"]=200;
$adc["message"]='成功';
$adc['uid']=$data->post('uid');//要推送的UID 但是不知道怎么送出去
$adc['data']=json_decode($data->post('msg'),true);
//$io->to($data->post('uid'))->emit('pusha', $adc);//這個(gè)試了不起效果
$io->emit('pusha',$adc);//只能這樣群發(fā)了 前端根據(jù)用戶的ID 從推送的數(shù)據(jù)里撿起屬于自己的
if(!$data->post('msg')) {
$rb=input('param.');
$rc=input('');
$http_connection->send('fail, $_GET["msg"] not found!!rb:');
}
$http_connection->send('ok');
};
$inner_http_worker->listen();
});
// 當(dāng)有客戶端連接時(shí)
$io->on('connection', function($socket) {
// 定義chat message事件回調(diào)函數(shù)
$socket->on('init', function ($data) use($socket) {
//這里判斷用戶是否在數(shù)組里結(jié)果也沒起效 控制臺(tái)里依舊顯示多了一個(gè)ID
//前端頁面刷新就多一個(gè)
$data = json_decode($data, true);
$socket->uid = $data['uid'];
static::$online[$data['uid']] =$socket;
$socket->emit('init', 'login listen success', function ($res){});
});
$socket->on('push', function ($data) use($socket) {
$socket->emit('push', '這是push7788', function ($res){});
// $io->emit('find message from server',$data);
});
$socket->on('disconnect', function($socket){
static::$online[$socket->uid]
});
});
Worker::runAll();
}
鏈接的時(shí)候 記錄了用戶的id
用戶前端 執(zhí)行了
this.$socket.close() //這是JS
斷開了鏈接
如何在PHP里把用戶的ID消除掉呢? 如何判斷$online 有沒有這個(gè) ID呢?
里面的注解的問題 折騰一星期好像也沒有多大效果
$socket->on('disconnect', function($socket){
static::$online[$socket->id]
});
連接斷開的時(shí)候消除id。
用isset(static::$online[$id]) 來判斷是否在線
public static $online = [];
public function index()
{
$context = array(
'ssl' => array(
'local_cert' => $_SERVER['DOCUMENT_ROOT'].'\lx.diguadou.com.cer',
'local_pk' => $_SERVER['DOCUMENT_ROOT'].'\lx.diguadou.com.key',
'verify_peer' => false,
)
);
// $io = new SocketIO(8282,$context);//socket的端口
$io = new SocketIO(8282);//socket的端口
$io->on('workerStart', function () use ($io) {
$inner_http_worker = new Worker('http://0.0.0.0:5880');
$inner_http_worker->onMessage = function ($http_connection, $data) use ($io) {
// isset(static::$online[$data->post('uid')]);
$adc["code"]=200;
$adc["message"]='成功';
$adc['uid']=$data->post('uid');//要推送的UID 但是不知道怎么送出去
$adc['data']=json_decode($data->post('msg'),true);
//$io->to($data->post('uid'))->emit('pusha', $adc);//這個(gè)試了不起效果
$io->emit('pusha',$adc);//只能這樣群發(fā)了 前端根據(jù)用戶的ID 從推送的數(shù)據(jù)里撿起屬于自己的
if(!$data->post('msg')) {
$rb=input('param.');
$rc=input('');
$http_connection->send('fail, $_GET["msg"] not found!!rb:');
}
$http_connection->send('ok');
};
$inner_http_worker->listen();
});
// 當(dāng)有客戶端連接時(shí)
$io->on('connection', function($socket) {
// 定義chat message事件回調(diào)函數(shù)
$socket->on('init', function ($data) use($socket) {
//這里判斷用戶是否在數(shù)組里結(jié)果也沒起效 控制臺(tái)里依舊顯示多了一個(gè)ID
//前端頁面刷新就多一個(gè)
$data = json_decode($data, true);
$socket->uid = $data['uid'];
static::$online[$data['uid']] =$socket;
$socket->emit('init', 'login listen success', function ($res){});
});
$socket->on('push', function ($data) use($socket) {
$socket->emit('push', '這是push7788', function ($res){});
// $io->emit('find message from server',$data);
});
$socket->on('disconnect', function($socket){
static::$online[$socket->uid]
});
});
Worker::runAll();
}
這是我寫的大部分代碼 感覺問題特別多