搜索
系统检测到您的用户名不符合规范:

workerman问题

浏览:1014 发布日期:2019年10月08日 分类:ThinkPHP5专区 关键字: workerman socket
workerman启动了 前台登录了 怎么给这个用户单独发送推送消息呢

心跳也成功了
现在不知道怎么在别的控制器里去做这个推送
worker。php代码
<?php
namespace app\push\controller;
use think\worker\Server;
use Workerman\Lib\Timer;
define('HEARTBEAT_TIME', 30); //心跳30秒

class Worker extends Server
{
protected $socket = 'websocket://fast.com:2346';
public $connectionArr = array();
/**
* 收到信息
* @param $connection
* @param $data
*/
public function onMessage($connection, $data)
{ $connection->lastMessageTime = time();
$wsData = json_decode($data,true);

if(!isset($wsData['option'])){
$connection->send('接收数据:'.$data);
return;
}
switch($wsData['option']){
case "login":
$connection->uid=$wsData['uid'];
echo $wsData['uid']."上线了";
$this->setOnline($connection);
break;
default:
$connection->send('其他数据');
break;
}
}

//如果是发送消息
public function sendMsg($data){

$msgStr = json_encode(array("option"=>"sendMsg","msg"=>"发给".$data['toUser']."的消息:".$data['msgContent']));

$this->connectionArr[$data['toUser']]->send($msgStr);
}

//用户上线
public function setOnline($connection){
$this->connectionArr[$connection->uid] = $connection;
}


/**
* 当连接建立时触发的回调函数
* @param $connection
*/
public function onConnect($connection)
{
}

/**
* 当连接断开销毁连接对象节约内存空间
* @param $connection
*/
public function onClose($connection)
{
}

/**
* 当客户端的连接上发生错误时触发
* @param $connection
* @param $code
* @param $msg
*/
public function onerror($connection, $code, $msg)
{
echo "\r\n error $code $msg\n";
}
/**
* 每个进程启动
* @param $worker
*/
public function onWorkerStart($worker)
{
// 进程启动后设置一个每秒运行一次的定时器
Timer::add(1, function ()use($worker){
$time_now = time();
foreach ($worker->connections as $connection) {
// 有可能该connection还没收到过消息,则lastMessageTime设置为当前时间
if (empty($connection->lastMessageTime)) {
$connection->lastMessageTime = $time_now;
continue;
}
// 上次通讯时间间隔大于心跳间隔,则认为客户端已经下线,关闭连接
if ($time_now - $connection->lastMessageTime > HEARTBEAT_TIME) {
$connection->close();
}
}
});
}

}
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
光年
积分:300 等级:LV2
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /