有没有办法使用没有Laravel框架和NPM的Laravel-echo库?只需使用<script>标签并将库添加到我的项目中.
我正在关注使用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()方法中添加了日志以验证它是否被调用.然后我将驱动程序从更改pusher为log,我确实看到广播信息被写入laravel.log文件.
因此,我假设在使用Pusher驱动程序时也会发生广播,并且要么没有从Laravel发出,要么没有被客户端接收.
我是插座,推杆和Laravel Echo的新手,所以我不知道在哪里可以找到更多信息来追踪它.
laravel.log文件中看到任何错误.我无法在私人频道中收听事件。但是,我可以收听公共频道。
问题
这有效:
Echo.channel('Foo.Bar')
.listen('MyEvent', (e) => {
console.log('It worked!');
});
Run Code Online (Sandbox Code Playgroud)
我可以在 Pusher Debug Console 中看到有三个连续的事件:
另外,如果我发送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,我在浏览器控制台中看不到输出。
我做了什么
Broadcast::routes();在boot()方法中添加BroadcastServiceProviderBroadcast::channel('Foo.Bar', function ($user, $FooBarId) {return true;});
在boot()方法中添加BroadcastServiceProvider
有一个与 supervisor 一起工作的队列。
config\broadcasting使用应用程序、密钥、机密、驱动程序、集群、加密正确设置我的设置。(我可以从我的应用程序向 Pusher 发送事件)旁注
我可以使用我的应用程序发送和收听公共事件。只有当频道变为私有时,我才能收听(我的应用程序可以将私有频道上的事件发送到 Pusher)。
我怀疑,因为它可能与认证 …
我对实时事件广播非常陌生,我有简单的 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
我正在尝试使用 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 的调试控制台上仅连接和断开连接的请求。为什么它没有推送任何类型的错误以及为什么它不能正常工作?
如果我手动运行 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) 我需要托管一个通过 HTTPS 服务器使用 laravel-echo-server 的 laravel 应用程序。
我想使用 Apache 的反向代理将我的/socket.iourl 轮询重定向到在同一域 url 内运行的端口127.0.0.1。6001laravel-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) 我正在设置 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)
但是,当然,我想删除前缀(或弄清楚为什么它在那里)。希望有人能为我解决这个问题。提前致谢。
我正在开发一个基于 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
我在Laravel 后端使用Beyondco Larevel Websockets,在 Flutter 前端使用pusher_client和laravel_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 ×10
laravel-echo ×10
php ×3
pusher ×3
socket.io ×2
apache ×1
centos7 ×1
flutter ×1
laravel-5.3 ×1
laravel-5.4 ×1
laravel-5.6 ×1
redis ×1
supervisord ×1
websocket ×1