看文档一知半解?对单人的ID 发送不出去,无法唤醒前端只能群发

0

先上一下全部代码,嫌太多可以看下面的


public static $online = [];//用来记录在线用户
public function index()
{
$context = array(
'ssl' => array(
'local_cert' => $_SERVER['DOCUMENT_ROOT'].'\lx.dg.com.cer',
'local_pk' => $_SERVER['DOCUMENT_ROOT'].'\lx.dg.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('push', $adc);//这个试了不起效果
$io->emit('push',$adc);//只能这样群发了 前端根据用户的ID 从推送的数据里捡起属于自己的
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();
});
// 当有客户端连接时
$io->on('connection', function($socket) {
// 定义chat message事件回调函数
$socket->on('init', function ($data) use($socket) {
//这里判断用户是否在数组里结果也没起效 控制台里依旧显示多了一个ID
//前端页面刷新就多一个
$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();
}

在拿到要推送的数据后,Uid data 测试都不是 空后


    $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('push', $adc);//推送给指定的ID 不起作用??


求教应该如何才能正确发送出去,现在用的群发,
$io->emit('push',$adc);
凑合能解决一下,看了文档,刚上手真的一点路都找不不到,百度出来的几乎上没有多少能用的

已邀请:

q13113671764

赞同来自:

我去给你看了一下,socket.io主要是通过事件来进行通讯交互的。所以我觉得可以这样来处理,在js端定义一个事件
<script>
//这里 uid 实际应该对应每个用户的唯一uid
let uid = 1;
// 连接服务端
var socket = io('http://127.0.0.1:3120');


// 服务端通过emit('chat message from server', $msg)触发客户端的chat message from server事件
socket.on('chat message ' + uid, function(msg){
console.log('get message:' + msg + ' from server');
});
</script>


在php端获取到uid以后触发uid对应的事件
// 触发所有客户端定义的chat message from server事件
$io->emit("chat message {$uid}", $msg);


你仔细看看他的自定义事件,这个我是根据他文档那改的,没有测试过,但是理论应该是可行的.

要回复问题请先登录注册