uni-app中如何使用laravel-echo连接websocket服务

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app中如何使用laravel-echo连接websocket服务

代码示例

import Echo from 'laravel-echo';

window.Pusher = require('pusher-js');

let laravelEcho = new Echo({
    broadcaster: 'pusher',
    key: process.env.MIX_PUSHER_APP_KEY,
    wsHost: process.env.MIX_PUSHER_HOST,
    wsPort: process.env.MIX_PUSHER_PORT,
    wssPort: process.env.MIX_PUSHER_PORT,
    forceTLS: false,
    encrypted: true,
    disableStats: true,
    enabledTransports: ['ws', 'wss'],
});

laravelEcho.private(`orders.${orderId}`)
    .listen('OrderShipmentStatusUpdated', (e) => {
        console.log(e.order);
    });

报错信息

reportJSException >>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack ->
Uncaught TypeError: Cannot read property 'btoa' of undefined
at  (app-service.js:138733:32)
at webpack_require (app-service.js:138068:31)
at  (app-service.js:138455:31)
at webpack_require (app-service.js:138068:31)
at  (app-service.js:138121:18)
at  (app-service.js:138122:10)
at webpackUniversalModuleDefinition (app-service.js:138049:25)
at  (app-service.js:138050:7)
at  (app-service.js:142049:5)
at  (app-service.js:194330:3)

网页端可以正常连接,在uni-app中就不行了,求大佬指点!!!

图片

image


1 回复

uni-app 中使用 laravel-echo 连接 WebSocket 服务,你需要结合 Laravel Echo 和 Pusher 或 Socket.IO 等 WebSocket 服务器。下面是一个基本的示例,展示如何在 uni-app 中集成 Laravel Echo 来连接 WebSocket 服务。

1. 安装 Laravel Echo 和 Pusher-JS 或 Socket.IO-Client

首先,确保你已经在 uni-app 项目中安装了 Laravel Echo 和相应的 WebSocket 客户端库。例如,如果你使用的是 Pusher,可以通过 npm 安装:

npm install laravel-echo pusher-js --save

2. 配置 Laravel Echo

在你的 uni-app 项目中创建一个配置文件,例如 echo.js,用于配置 Laravel Echo:

import Echo from 'laravel-echo';

window.Pusher = require('pusher-js');

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: process.env.VUE_APP_PUSHER_APP_KEY,
    cluster: process.env.VUE_APP_PUSHER_APP_CLUSTER,
    forceTLS: true
});

// 如果你使用的是 Socket.IO,配置如下:
// window.Echo = new Echo({
//     broadcaster: 'socket.io',
//     host: window.location.hostname + ':6001',
//     auth: {
//         headers: {
//             Authorization: 'Bearer ' + yourAuthToken,
//         },
//     },
// });

3. 在 uni-app 中使用 Laravel Echo

在你的 uni-app 组件或页面中引入并使用 Laravel Echo。例如,在 pages/index/index.vue 中:

<template>
  <view>
    <text>WebSocket Test</text>
  </view>
</template>

<script>
import './echo'; // 确保引入了 echo.js 配置

export default {
  mounted() {
    window.Echo.channel('test-channel')
      .listen('TestEvent', (e) => {
        console.log('Received event:', e);
        // 在这里处理事件,例如更新 UI
      });
  },
};
</script>

4. 在 Laravel 中广播事件

确保你的 Laravel 应用能够广播事件。例如,创建一个事件和一个监听器,然后在事件触发时广播:

// 在 EventServiceProvider 中注册事件和监听器
protected $listen = [
    'App\Events\TestEvent' => [
        'App\Listeners\BroadcastTestEvent',
    ],
];

// TestEvent.php
namespace App\Events;

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

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

    public $message;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($message)
    {
        $this->message = $message;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return Channel|array
     */
    public function broadcastOn()
    {
        return new Channel('test-channel');
    }
}

这样,你就能够在 uni-app 中通过 Laravel Echo 连接并监听 WebSocket 事件了。

回到顶部