【问题标题】:React Native laravel echo listen is not workingReact Native laravel echo 监听不起作用
【发布时间】:2020-09-17 16:21:04
【问题描述】:

在 laravel redis 上一切正常,一切运行正常,没有问题。但是,我没有从 react native 获得我的事件的控制台日志,也没有警告或错误。这是我的代码

App.js

import Echo from 'laravel-echo/dist/echo';
import Socketio from 'socket.io-client';

const echo = new Echo({
    broadcaster: 'socket.io',
    host: 'http://localhost:6001',
    client: Socketio,
    auth: {
      headers: {
        'Authorization': 'Bearer 7ebee00f74965d11cae413998a13c802',
      },
    },
  });

  let orderId = 9;

  echo.channel('app_database_order.' + orderId)
    .listen('.OrderStatusEvent', (e) => {
      console.log('event: ', e);
    });

这是我的 Laravel 回显服务器控制台

⚠ Starting server in DEV mode...

✔  Running at localhost on port 6001
✔  Channels are ready.
✔  Listening for http events...
✔  Listening for redis events...

Server ready!

Channel: app_database_order.9
Event: OrderStatusEvent
Channel: app_database_order.9
Event: OrderStatusEvent
Channel: app_database_order.9
Event: OrderStatusEvent

laravel-echo-server.json:

{
    "authHost": "http://localhost",
    "authEndpoint": "/broadcasting/auth",
    "clients": [
        {
            "appId": "AppId",
            "key": "7ebee00f74965d11cae413998a13c802"
        }
    ],
    "database": "redis",
    "databaseConfig": {
        "redis": {
            "port":"6379",
            "host":"127.0.0.1",
            "db":"0",
            "password":"0TaEotyBIzOSym6zEXdsD2f2VCiPJmj4s/2nkGgyC4BBnm7CVUphOPCJ3LYoEUWuuqLokqJ/CCrJ3HqR"
        },
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        },
        "publishPresence": true
    },
    "devMode": true,
    "host": null,
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "secureOptions": 67108864,
    "sslCertPath": "",
    "sslKeyPath": "",
    "sslCertChainPath": "",
    "sslPassphrase": "",
    "subscribers": {
        "http": true,
        "redis": true
    },
    "apiOriginAllow": {
        "allowCors": true,
        "allowOrigin": "*",
        "allowMethods": "GET, POST",
        "allowHeaders": "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id"
    }
}

我正在尝试通过从邮递员调用此 API 来触发事件:

Route::post('/ship', function (Request $request)
{
    $order_id = $request->input('order_id');

    $order = Order::findOrFail($order_id);
    event(new OrderStatus($order));
    return true;
});

订单状态事件:

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

    public $order_id;

    public function __construct(Order $order)
    {
        $this->order_id = $order->id;
    }

    public function broadcastOn()
    {
        return new Channel('order.'.$this->order_id);
    }

    public function broadcastAs() {
        return 'OrderStatusEvent';
    }
}

我正在使用 expo 运行 react-native,所以日志应该出现在 expo 控制台中, 什么都没有出现。

我在这个问题上工作了 3 天,但没有解决方案 :(。 请帮忙。

【问题讨论】:

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


    【解决方案1】:

    尝试降级到 Echo 版本 2.4.0。它为我解决了这个问题。

    另外,使用echo.on()代替echo.listen()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-30
      • 2017-08-21
      • 2020-07-25
      • 2018-07-29
      • 2022-06-21
      • 2019-03-05
      相关资源
      最近更新 更多