标签: laravel-echo

如何在没有laravel框架和npm的情况下使用laravel echo

有没有办法使用没有Laravel框架和NPM的Laravel-echo库?只需使用<script>标签并将库添加到我的项目中.

php laravel laravel-echo

6
推荐指数
1
解决办法
861
查看次数

如何解决Laravel Broadcasts + Pusher ..?

我正在关注使用Pusher设置广播的Laravel文档,它看起来非常直接,但我还没有完成它,所以我一定在某个地方犯了一个错误.

这就是我所做的:

服务器端

我创建了一个Event实现ShouldBroadcastNow接口并定义broadcastsOn()方法的方法.

class ThreadMessageCreated implements ShouldBroadcastNow {
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public function broadcastOn() {
        return new Channel('bobtest');
    }
Run Code Online (Sandbox Code Playgroud)

我正从我的一个API控制器中提取事件:

public function createMessage(Thread $thread, Request $request) {
    ...
    event(new ThreadMessageCreated($message, $thread));
    return $message;
}
Run Code Online (Sandbox Code Playgroud)

我在我的.env文件中配置了推送凭据.

客户端

我在客户端配置了Laravel Echo(通过angular-laravel-echo包)并将我的客户端订阅了该频道.

ngOnInit() {
    this.echo
        .join('bobtest', 'public')
        .listen('bobtest', 'ThreadMessageCreated')
        .subscribe(()=>alert('message received'));
    console.log(this.echo);
}
Run Code Online (Sandbox Code Playgroud)

但是,当我的API端点被命中时,事件被触发,但我在客户端看不到任何内容.

所以,我在broadcastOn()方法中添加了日志以验证它是否被调用.然后我将驱动程序从更改pusherlog,我确实看到广播信息被写入laravel.log文件.

因此,我假设在使用Pusher驱动程序时也会发生广播,并且要么没有从Laravel发出,要么没有被客户端接收.

我是插座,推杆和Laravel Echo的新手,所以我不知道在哪里可以找到更多信息来追踪它.

  • 我没有在laravel.log文件中看到任何错误.
  • 我在客户端的Chrome …

laravel pusher laravel-echo laravel-5.6

6
推荐指数
1
解决办法
414
查看次数

Laravel Echo 无法订阅 Pusher 私人频道

我无法在私人频道中收听事件。但是,我可以收听公共频道。

问题

这有效:

Echo.channel('Foo.Bar')
    .listen('MyEvent', (e) => {
        console.log('It worked!');
    });
Run Code Online (Sandbox Code Playgroud)

我可以在 Pusher Debug Console 中看到有三个连续的事件:

  1. 联系
  2. 已订阅
  3. 占据

另外,如果我发送Channel: Foo.Bar; Event: App\Events\MyEvent,我可以在浏览器控制台中看到输出。

但是,这不起作用:

Echo.private('Foo.Bar')
    .listen('MyEvent', (e) => {
        console.log('It privately worked!');
    });
Run Code Online (Sandbox Code Playgroud)

我在 Pusher 调试控制台中没有看到订阅。显然,如果我发送Channel: private-Foo.Bar; Event: App\Events\MyEvent,我在浏览器控制台中看不到输出。

我做了什么

  1. Broadcast::routes();boot()方法中添加BroadcastServiceProvider
  2. Broadcast::channel('Foo.Bar', function ($user, $FooBarId) {return true;});boot()方法中添加BroadcastServiceProvider

  3. 有一个与 supervisor 一起工作队列

  4. config\broadcasting使用应用程序、密钥、机密、驱动程序、集群、加密正确设置我的设置。(我可以从我的应用程序向 Pusher 发送事件)

旁注

我可以使用我的应用程序发送和收听公共事件。只有当频道变为私有时,我才能收听(我的应用程序可以将私有频道上的事件发送到 Pusher)。

我怀疑,因为它可能与认证 …

laravel pusher laravel-5.3 laravel-echo

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

如何为广播身份验证路由定义或传递身份验证守卫而不是默认身份验证守卫?

我对实时事件广播非常陌生,我有简单的 laravel-echo-server 设置并处理所有内容。我无法针对其他身份验证设置/定义身份验证,它始终guard检查 我已为每个守卫专用通道设置的身份验证路由,如下每个文档所示。user/default guardauth.phproutes/channel.php

对于 authguard 用户私人频道

Broadcast::channel('users.{id}', function ($user, $id) {
   Log::info(class_basename($user));
   return (int) $user->id === (int) $id;
});
Run Code Online (Sandbox Code Playgroud)

对于 authguard 管理员私人频道

Broadcast::channel('admins.{id}', function ($admin, $id) {
   Log::info(class_basename($admin));
   return (int) $admin->id === (int) $id;
});
Run Code Online (Sandbox Code Playgroud)

它对于第一个案例的守卫工作得很好user,但对于第二个案例(即守卫)却不起作用admin。和

Log::info(class_basename($admin))总是返回User类。

那么,我们如何传递或定义它应该使用adminguard而不是user. 探索内部之后Illuminate\Broadcasting\Broadcasters\Broadcaster我发现下面一行411

public function user($guard = null)
{
    return call_user_func($this->getUserResolver(), $guard);
}
Run Code Online (Sandbox Code Playgroud)

所以,如果我们能传递这个guard参数就可以解决目的了。如果有人能给我任何东西或授权多个警卫设置的方式,那将非常有帮助。使用Laravel 5.4, laravel-echo-server, Redis, Socket.IO

socket.io laravel laravel-authorization laravel-echo laravel-5.4

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

Laravel 通知未广播而没有任何错误?

我正在尝试使用 Laravel 和 Vue JS 实现一个通知系统。我实现了一切,它需要工作,但通知类没有广播。

.env 文件

BROADCAST_DRIVER=pusher
PUSHER_APP_ID=40xxxx
PUSHER_KEY=5a6axxxxxx
PUSHER_SECRET=b35xxxxxx
Run Code Online (Sandbox Code Playgroud)

已经运行以下命令:

npm install --save laravel-echo pusher-js
composer require pusher/pusher-php-server "~2.6"
Run Code Online (Sandbox Code Playgroud)

在 app.js 中(未注释)

App\Providers\BroadcastServiceProvider::class,
Run Code Online (Sandbox Code Playgroud)

广播服务提供商.php

Broadcast::channel('App.User.*', function ($user, $userID) {
            return (int) $user->id === (int) $userID;
        });
Run Code Online (Sandbox Code Playgroud)

bootstrap.js

import Echo from "laravel-echo"
 window.Pusher = require('pusher-js');
 window.Echo = new Echo({
    broadcaster: 'pusher',
    key: '5a6axxxxxx',
    cluster: 'eu',
    encrypted: true,
    authEndpoint: "/broadcasting/auth"
 });
 window.Pusher.log = function(message){
    window.console.log(message);
 }
 window.Echo.private('App.User.1')
    .notification((notification) => {
        console.log(notification.type);
 });
Run Code Online (Sandbox Code Playgroud)

Laravel 日志中没有错误。与此同时,我正在检查 Pusher 的调试控制台上仅连接和断开连接的请求。为什么它没有推送任何类型的错误以及为什么它不能正常工作?

php laravel pusher laravel-echo

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

无法使用 Supervisor 启动 laravel-echo-server

如果我手动运行 laravel-echo-server - 它工作正常。但我无法使用主管运行 laravel-echo-server:我在前端遇到错误

GET http://example.com:6001/socket.io/EIO=3&transport=polling&t=MO25vx0net::ERR_CONNECTION_TIMED_OUT
Run Code Online (Sandbox Code Playgroud)

echoserver.log 已创建但始终为空

我尝试使用 sudo 重新启动并更新主管

/etc/supervisord.conf:

 [program:echo-server]
    command=/usr/bin/laravel-echo-server start
    dierctory=/var/www/www-root/data/www/example.com
    autostart=true
    user=root
    autorestart=true
    stdout_logfile=/var/www/www-root/data/www/example.com/storage/logs/echoserver.log
Run Code Online (Sandbox Code Playgroud)

laravel-echo-server.json:

{
    "authHost": "http://example.com",
    "authEndpoint": "/broadcasting/auth",
    "clients": [
        {
            "appId": "fe0ee01ccace98c",
            "key": "1138421388769fdbbf88293eb329c16a"
        }
    ],
    "database": "redis",
    "databaseConfig": {
        "redis": {
            "port": "6379",
            "host": "localhost"
        },
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": true,
    "host": null,
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": "",
    "sslCertChainPath": "",
    "sslPassphrase": "",
    "subscribers": {
        "http": true,
        "redis": true
    },
    "apiOriginAllow": { …
Run Code Online (Sandbox Code Playgroud)

supervisord laravel centos7 laravel-echo

5
推荐指数
2
解决办法
5208
查看次数

配置 Apache 反向代理以在生产环境中托管 Laravel Echo 服务器

我需要托管一个通过 HTTPS 服务器使用 laravel-echo-server 的 laravel 应用程序。

我想使用 Apache 的反向代理将我的/socket.iourl 轮询重定向到在同一域 url 内运行的端口127.0.0.16001laravel-echo-server

例如,https://example.com当我laravel-echo-server向 apache 发送 url 轮询时https://example.com/socket.io,应将其重定向到http://127.0.0.1:6001同一域内。

注意

我没有将 Laravel 应用程序托管在根目录中,而是托管在 cpanel 内的子目录中。

我的服务器是一个VPS子域主机,该子域主机在与主服务器主机不同的 IP 地址上运行。

假设我的主主机有host.mydomain.com一个指向该/home/...目录的唯一 IP 地址。这运行于http

我现在有一个domestic.mydomain.com指向该/home/domestic/...目录的唯一 IP 地址,这就是我托管 Laravel 应用程序的位置。这运行在https.

但我的 cpanel 登录是从host.mydomain.com我访问domestic.mydomain.com文件管理器的IP 地址进行的

我的laravel-echo-server.json样子:

{
    "authHost": "https://example.com",
    "authEndpoint": "/broadcasting/auth",
    "clients": [ …
Run Code Online (Sandbox Code Playgroud)

apache redis socket.io laravel laravel-echo

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

无法从频道中删除 laravel_database_ 前缀

我正在设置 Laravel echo 来广播事件。但每当我尝试广播到频道时,频道名称都会自动获得前缀:“laravel_database_”

我尝试将事件内的返回切换为常规“香奈儿”,如下所示:

public function broadcastOn()
{
return new Channel('public');
}
Run Code Online (Sandbox Code Playgroud)

但是当我查看 laravel-echo-server 日志时,我发现它仍在“laravel_database_public”上广播。

这样我就需要在我的 JS 中执行以下操作:

Echo.channel('laravel_database_public').listen('MessageSent', ({message}) => {
                console.log(message);
            });
Run Code Online (Sandbox Code Playgroud)

但是,当然,我想删除前缀(或弄清楚为什么它在那里)。希望有人能为我解决这个问题。提前致谢。

php laravel laravel-echo

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

如何将数据从客户端发送到 Laravel echo websocket

我正在开发一个基于 Websockets 的 Laravel 应用程序,使用Laravel Echo.

在服务器端一切正常,当我发送数据(通过Laravel-Websockets浏览器的可视界面)时,它们实时出现在浏览器控制台中。

这样:(客户端)

Echo.channel('testchannel')
    .listen('TestEvent', (e) => {
        console.log(e.message);
    });
Run Code Online (Sandbox Code Playgroud)

但是我也希望能够将数据从客户端发送到服务器(就像使用Websocket:send()方法完成的那样),为此我使用以下代码行:

Echo.connector.socket.emit('App/Events/TestEvent', 'testchannel', {"message":"Hello World"});
Run Code Online (Sandbox Code Playgroud)

但是,浏览器控制台中出现以下错误:

TypeError: Echo.connector.socket is undefined

websocket laravel laravel-echo

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

Flutter + Laravel Websocket + Pusher 更换(代客安全)

我在Laravel 后端使用Beyondco Larevel Websockets,在 Flutter 前端使用pusher_clientlaravel_echo

我一直在尝试从我的 ios 模拟器连接到我的 Laravel 后端主机,它使用了代客安全,但失败了。

我的颤振连接:

PusherClient getPusherClient(String token) {
  PusherOptions options = PusherOptions(
      host: 'my-local-server.test',
      wsPort: 6001,
      wssPort: 6001,
      cluster: DotEnv.env['PUSHER_APP_CLUSTER'],
      encrypted: true,
      auth: PusherAuth('https://my-local-server.test/api/broadcasting/auth',
          headers: {'Authorization': 'Bearer $token'})
  );

  return PusherClient(DotEnv.env['PUSHER_APP_KEY'], options,
      enableLogging: true, autoConnect: false);
}
pusherClient = getPusherClient(token);
pusherClient.connect();
pusherClient.onConnectionStateChange((state) {
  print(
      "previousState: ${state.previousState}, currentState: ${state.currentState}");
});
pusherClient.onConnectionError((error) {
  print(error.message);
});
Run Code Online (Sandbox Code Playgroud)

https://my-local-server.test/laravel-websockets我从来没有看到来自 Flutter 的请求,但是如果我从我的 Laravel 后端触发一个事件,它会被记录下来。

请帮助我解决设置中的问题,为什么我无法从 Flutter 应用程序连接到运行 laravel-websocket 的 SSL …

laravel flutter laravel-echo laravel-websockets

5
推荐指数
0
解决办法
171
查看次数