【问题标题】:Laravel echo, socket io fetching in React-NativeLaravel echo,React-Native 中的套接字 io 获取
【发布时间】:2020-06-19 23:30:39
【问题描述】:

我正在尝试在模型创建后获取它。问题是事件被触发了,但我在前端什么都没有,所以我认为这只是一个前端问题,所以让我展示一些代码:

让我们从后端开始:

事件:

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

use App\Homework;

class HomeworkCreated implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $homework;

    public function __construct($homework)
    {
        $this->homework = $homework;
    }

    public function broadcastOn()
    {
        return new Channel('subject.' . $this->homework->subject->id);
    }
}

这就是我在控制器中触发它的方式:

$homework = new Homework([
        'subject_id' => $request->subject_id,
        'user_id' => auth()->user()->id, 
        'title' => $request->name,
        'image' => $path,
        'description' => $request->description,
        'duedate' => $request->date
        ]);

        $homework->save();

        event(new HomeworkCreated($homework));

现在,正如我们所见,它正在返回一个频道,在我的 Laravel 回显服务器中显示为:

Channel: homewrk_database_subject.9 // This confuses me a bit
Event: App\Events\HomeworkCreated

当我说“它让我感到困惑”时,我的意思是我真的不知道这条路线是否真的是那条路线,所以现在我们来看看我的前端(react-native):

render() {

        const echo = new Echo({
            host: 'ws://127.0.0.1:6001',
            broadcaster: 'socket.io',
            client: Socketio,
          });

          echo
            .channel('homewrk_database_subject.', this.props.navigation.getParam('id'))
            .listen('HomeworkCreated', ev => this.homeworks.push(ev)); // trying to add the response to the array.

这段代码就在return 之前,因为这是一个类而不是函数组件。

我的目标是将新模型添加到获取的项目数组中以显示它

【问题讨论】:

  • 使用这个```主机:window.location.hostname + ':6001' ```作为你的主机,频道名称是redis前缀,只需转到database.php配置文件和索引redis -> 选项 -> 前缀

标签: laravel react-native socket.io laravel-echo


【解决方案1】:

您的配置中的主机:主机:'ws://127.0.0.1:6001',请记住 127.0.0.1 用于本地主机(自身设备),然后当您使用“127.0.0.1”时,您说连接到您的在您运行 React Native App 的设备或模拟器中使用 self ,但请记住 Laraver Echo Server,不要在您的设备中运行,它在您的“pc/mac”的“服务器”中运行,那么您需要使用网络 ip您的计算机/mac 的地址而不是 127.0.0.1

【讨论】:

    猜你喜欢
    • 2021-05-31
    • 2018-02-16
    • 2023-01-12
    • 2016-08-27
    • 2020-07-12
    • 2022-07-07
    • 1970-01-01
    • 1970-01-01
    • 2020-09-17
    相关资源
    最近更新 更多