小编Jan*_*ann的帖子

Redis的Laravel广播没有工作/连接?

所以我试图在帮助下播放Laravel 5 Events Redis.不,我不想使用服务,Pusher因为它不是免费的(即使免费限制对我来说足够了),我想保持对广播服务器的控制.

所以我到目前为止所做的是,我设置了一个redis服务器(监听端口6379 - >默认),我设置了以下事件:

class MyEventNameHere extends Event implements ShouldBroadcast
{
    use SerializesModels;
    public $data;

    /**
     * Create a new event instance.
     *
     * @return \App\Events\MyEventNameHere
     */
    public function __construct()
    {
        $this->data = [
            'power' => 10
        ];
    }

    /**
     * Get the channels the event should be broadcast on.
     *
     * @return array
     */
    public function broadcastOn()
    {
        return ['pmessage'];
    }
}
Run Code Online (Sandbox Code Playgroud)

我注册了一个到该事件的路线:

Route::get('test',function()
{
    event(new App\Events\MyEventNameHere());
    return "event fired";
});
Run Code Online (Sandbox Code Playgroud)

我创建了(更像是复制:P)节点套接字服务器:

var …
Run Code Online (Sandbox Code Playgroud)

javascript sockets redis node.js laravel

13
推荐指数
1
解决办法
2623
查看次数

从 Laravel 外部推送到 Laravel 队列 (NodeJS)

我有一个 Laravel 5.3 安装作为纯 API 应用程序运行,需要从多个不同的应用程序进行连接。

一切都工作正常(毕竟我们谈论的是 Laravel :P),除了我不明白一件事:

我有一个 MQTT 服务器,它正在侦听来自多个设备的消息(无论是什么)。这些消息包含有关需要在后端调用的作业类和方法的信息。

我无法直接调用API,设备根本不支持这一点(他们支持,但这比使用MQTT传输数据要费力得多)。我的想法是将一个新作业推送到队列中,定义要调用哪个 Laravel 作业类(以及哪个方法)。问题是 JSON 序列化...

MQTT 服务器在 NodeJS 上运行,我的队列在 Redis 上运行。我记得 Taylor 在推文中提到,理论上可以序列化所需的 JSON 并从 Laravel 外部推送到队列,然后由 Laravel 处理作业。

有人知道如何解决这个问题吗?有没有关于 JSON 结构的文档?

我还应该提到,Laravel 工作线程消耗的 NodeJS 推送队列这个解决方案对我来说不起作用。与上面的结果相同,作业被放置在队列中,但在没有被处理或抛出任何错误的情况下被丢弃。

Redis 中排队事件的示例数据结构如下所示:

"{\"job\":\"Illuminate\\\\Broadcasting\\\\BroadcastEvent\",\"data\":{\"event\":\"O:28:\\\"App\\\\Events\\\\NotificationEvent\\\":5:{s:7:\\\"\\u0000*\\u0000name\\\";s:12:\\\"notification\\\";s:4:\\\"data\\\";a:4:{s:4:\\\"testkey\\\";s:14:\\\"testval\\\";s:9:\\\"timestamp\\\";s:19:\\\"2017-02-24 11:07:48\\\";s:5:\\\"event\\\";s:12:\\\"notification\\\";s:5:\\\"class\\\";s:28:\\\"App\\\\Events\\\\NotificationEvent\\\";}s:10:\\\"\\u0000*\\u0000channel\\\";N;s:7:\\\"\\u0000*\\u0000user\\\";O:45:\\\"Illuminate\\\\Contracts\\\\Database\\\\ModelIdentifier\\\":2:{s:5:\\\"class\\\";s:8:\\\"App\\\\User\\\";s:2:\\\"id\\\";i:2;}s:6:\\\"socket\\\";N;}\"},\"id\":\"XuUKRTf8CTSdzaVgp2gRcvmxQqLcpBUG\",\"attempts\":1}"

基于该结构,我认为对象(需要序列化)应该类似于以下内容:

{
"job":"EventClass@method", //<-- Just a name
"data":{
    "event":"EventClass", //<-- Just a name
    "name":"EventName", //<-- Just a name
    "data":{
    "key":"value"
    "event":"EventName" //<-- Same as data.name
    "class":"EventClass@method" //<-- This is actually being called
    }
}
Run Code Online (Sandbox Code Playgroud)

Laravel 实际放入队列的内容中还包含其他信息(例如时间戳、用户模型标识符等),但我认为这对于触发作业来说不是必需的。 …

javascript queue redis node.js laravel

5
推荐指数
1
解决办法
4569
查看次数

标签 统计

javascript ×2

laravel ×2

node.js ×2

redis ×2

queue ×1

sockets ×1