Closed yiqing-95 closed 8 years ago
你的 console\controllers\MySubscribeCallback::publish() 声明有问题?
声明没问题 是phpstorm IDE(你知道 这个是世界上最好的IDE 哈哈)生成的方法桩 。报的是函数参数兼容问题。 这个类也是从你测试目录考过来的:
class MySubscribeCallback extends MessageHandler
{
/*
public function publish(MQTT $mqtt, Message\PUBLISH $publish_object)
{
// parent::publish($mqtt, $publish_object); // TODO: Change the autogenerated stub
printf(
"\e[32mI got a message\e[0m:(msgid=%d, QoS=%d, dup=%d, topic=%s) \e[32m%s\e[0m\n",
$publish_object->getMsgID(),
$publish_object->getQos(),
$publish_object->getDup(),
$publish_object->getTopic(),
$publish_object->getMessage()
);
}
*/
public function publish(MQTT $mqtt, $publish_object)
{
// parent::publish($mqtt, $publish_object); // TODO: Change the autogenerated stub
printf(
"\e[32mI got a message\e[0m:(msgid=%d, QoS=%d, dup=%d, topic=%s) \e[32m%s\e[0m\n",
$publish_object->getMsgID(),
$publish_object->getQos(),
$publish_object->getDup(),
$publish_object->getTopic(),
$publish_object->getMessage()
);
}
}
还有一点 你的composer.json 中好像没有名空间配置:
"autoload": {
"psr-4": {
"Dsskaje\\mqtt\\": "mqtt/"
}
},
这样不能使用composer 的类加载机制 必须手动实现加载机制 如果用composer 安装的话 这点感觉有点鸡肋 :ghost:
public function publish(\sskaje\mqtt\MQTT $mqtt, \sskaje\mqtt\Message\PUBLISH $publish_object)
:kissing: 感谢 使用全额名空间后可以工作了 IDE补全误导我了
还有我犯了个低级错误 一直连接不上是因为端口错误 :
$MQTT_SERVER = 'tcp://localhost:1883/';
我一直连到8883 这个安全端口去了 使用的emqqt 做broker 最后看到mqtts 才运行在8883端口
yii框架中测试时:
php5.6 报的错误
我嫌麻烦 直接跑到你基类里面 改掉了 参数的类型暗示: Message\PUBLISH $publish_object =》 $publish_object
你这里的类型暗示 名空间偷懒 不带全部前缀 ^_^ 我不清楚是不是这个原因 MySubscribeCallback 这个类是从你测试文件中 直接拷贝到我的名空间文件去的 ;