大家好,我工作与Laravel回声和SocketIO没有Vue只有jQuery,但我有一个问题与私人渠道在这里我向你展示,我有两个事件正常和私人渠道正常渠道(todocanales我的事件Hola活动)工作正常,当我午餐的事件
use App\Events\HolaEvent;
Route::get('/fire', function () {
$data = [
'type' => 'erhelloror',
'title' => 'new article has been published',
'message' => 'check it out',
'url' => 'url',
];
event(new HolaEvent($data));
return 'done';
});
在我的laravel echo服务器控制台中,向我展示:
[03:04:47] - 5s6214Rlv51NUgnDAAAA joined channel: todocanales
[03:04:48] - QpxGvCjmaezgHn3aAAAB authenticated for: private-like-received.2jzwpAg1
[03:04:48] - QpxGvCjmaezgHn3aAAAB joined channel: private-like-received.2jzwpAg1
Channel: todocanales
Event: App\Events\HolaEvent
CHANNEL todocanales
在浏览器控制台中,我得到
~~~对象{数据:对象,套接字:null}~~~
所有完美的,但与私人频道我有问题Laravel回声服务器不做任何事情,并没有在我的控制台上的用户登录,当然,我已经运行
php artisan queue:listen redis
我的私人频道我在我的控制器里吃午餐
use App\Events\NewLikePostEvent;
$data = array(
'user_id' => Hashids::encode($post->user_id),
'user_name' => $name_user
);
event(new NewLikePostEvent($data));
在项目中,我有以下文件:
Broadcast::channel('like-received.{id}', function ($user, $id) {
return true;
});
Broadcast::channel('todocanales', function ($user, $id) {
return true;
});
import Echo from "laravel-echo"
window.Echo = new Echo({
broadcaster: 'socket.io',
host: 'http://imagenes.dev:6001'
});
$(document).ready(function(){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content'),
'X-Socket-Id': Echo.socketId()
}
});
var receiverId = document.getElementById('receiver_id').value;
Echo.private('like-received.'+ receiverId).listen('NewLikePostEvent', function(e) {
console.log("Wena!, a "+e.data.user_name + " le ha gustado uno de tus aportes");
console.log(e);
});
Echo.channel('todocanales').listen('HolaEvent', function(e) {
console.log(e);
});
});
对于receiverId,我使用隐藏在页脚中的输入
<input type="hidden" id="receiver_id" value="{{Hashids::encode(Auth::user()->id)}}" />
我有两件事
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class NewLikePostEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $data;
public function __construct(array $data = [])
{
$this->data = $data;
}
public function broadcastOn()
{
return new PrivateChannel('like-received.'.$this->data->user_id);
}
}
<?php
namespace App\Events;
use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
class HolaEvent implements ShouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $data;
public function __construct(array $data = [])
{
$this->data = $data;
}
public function broadcastOn()
{
return new Channel('todocanales');
}
}
{
"authHost": "http://imagenes.dev",
"authEndpoint": "/broadcasting/auth",
"clients": [
{
"appId": "ec69415ae1adcbf2",
"key": "578712cd13fd83f7cadef22742d6728c"
}
],
"database": "redis",
"databaseConfig": {
"redis": {
"host": "127.0.0.1",
"port": "6379"
},
"sqlite": {
"databasePath": "/database/laravel-echo-server.sqlite"
}
},
"devMode": true,
"host": "imagenes.dev",
"port": "6001",
"protocol": "http",
"socketio": {},
"sslCertPath": "",
"sslKeyPath": ""
}
APP_NAME=Laravel
APP_ENV=local
APP_KEY=base64:ewoyjfyNjXd0FArdsfdsfsNLV7VQH35s=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://imagenes.dev
SOCKET_PORT=6001
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=imagenes
DB_USERNAME=root
DB_PASSWORD=secret
BROADCAST_DRIVER=redis
CACHE_DRIVER=redis
SESSION_DRIVER=redis
QUEUE_DRIVER=redis
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
我已经在节点服务器上运行了这个套接字io脚本。js
require('dotenv').config();
const server = require('http').Server();
const io = require('socket.io')(server);
const Redis = require('ioredis');
const redis = new Redis();
server.listen({
port: process.env.SOCKET_PORT
});
redis.subscribe('*');
console.log(process.env.SOCKET_PORT);
redis.on('like-received.*', function (channel, message) {
const event = JSON.parse(message);
io.emit(event.event, channel, event.data);
});
redis.on('todocanales', function (channel, message) {
const event = JSON.parse(message);
io.emit(event.event, channel, event.data);
});
最后是我的
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Broadcast;
class BroadcastServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
Broadcast::routes(['middleware' => ['web', 'auth']]);
require base_path('routes/channels.php');
}
}
并且当在队列的控制台中使用私有通道执行事件NewLikePostEvent时,会有一个无限的get
?[33m[2017-05-10 07:07:10] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:12] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:14] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:16] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:18] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:20] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:21] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:23] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:25] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:27] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:29] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:31] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:33] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:35] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:37] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:38] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:40] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:42] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:44] Processing:?[39m App\Events\NewLikePostEvent
?[33m[2017-05-10 07:07:46] Processing:?[39m App\Events\NewLikePostEvent
PS:我知道在服务器中使用Maxtry只是我案例中的一个更重要的信息,即事件的无限循环
我写代码是因为将来可能会有帮助我希望有人能帮助我:D
问候!
如果没有完整的源代码和运行的应用程序,这个问题很难排除。
所以你有私人频道的问题。
我已经实现了所有3种类型的渠道(私人,公共
https://github.com/xparthx/laravel-realtime-chat
谢谢
固定的
事件是无限处理且从未被处理的问题是因为在我的事件中,我使用:
public function broadcastOn()
{
return new PrivateChannel('like-received.'.$this->data->user_id);
}
但是$data是一个数组而不是一个对象,它是一个键入错误,输入了me xD,通道名替换了dot(.)对于(-)
'like-received.'.$this->data->user_id
到
'like-received-'.$this->data['user_id']
最后是广播
public function broadcastOn()
{
return new PrivateChannel('like-received-'.$this->data['user_id']);
}
其余的代码我混合了Parth Vora的代码回购:)(谢谢!)https://github.com/xparthx/laravel-realtime-chat
我不需要使用服务器。对于这个js文件,我们使用Laravel echo服务器
和应用程序。我改成
window.Echo.private('like-received-'+window.Laravel.user).listen('NewLikePostEvent', function(e) {
console.log("Wena!, a "+e.data.user_name + " le ha gustado uno de tus aportes");
console.log(e);
});
你可以看到,现在我使用窗口。我aravel.user我在刀片文件上创建的
<script>
window.Laravel = {
'csrfToken': '{{ csrf_token() }}',
'user': '{{Hashids::encode(Auth::user()->id)}}'
};
</script>
我希望这将是有帮助的人,因为我尝试了3天修复这个哈哈哈:D
但是私有通道的是什么?不是你私人邀请里的那个。 因为现在我们可以在所有方法中传递通道用户名(格式为@channelusername),而不是forwardMessage中的from_chat_id。但是我管理的私人频道的@ChannelUsername是什么?
我试图用Laravel Echo在私人频道上收听,但它不只在私人频道上收听,公共频道工作正常。 我也在使用Beyondcode/Laravel-WebSocket包,它在WebSocket仪表板面板中显示了所有的连接和事件。它显示了包本身的私有连接、我的公共连接和所有触发的事件(私有和公共),但没有显示我的私有连接 如果触发该事件并将数据保存在数据库中,则所有操作都完全正常,只是在视图中,我没有从
在使用私人频道时,我无法让echo和pusher正常工作,在谷歌上搜索了两天,找到了nada。 似乎正在发生的是某种身份验证问题(我使用Laravel基本身份验证),因为我可以订阅公共频道 路线/频道。php bootstrap.js default.blade.php(主要布局) 控制台上打印的内容是: 这是一个非常普通的错误,然后为了调试的目的,我试图使用Pusher(而不是laravel e
我使用curl更新我的公共频道。这种语法: 但是私人频道的是什么?它不是你在私人邀请中的那个。 因为现在我们可以在所有方法中传递通道用户名(格式为@channelusername)来代替chat\u id(而不是forwardMessage中的from\u chat\u id)。但是我管理的私人频道的@channelusername是什么?
说明 调用方法: 引入f2e.Act.js后,body 设为 data-config="true" 会自动加载 渠道信息 <html> <body data-config="true"> </html> 脚本 <script> var _F2ECONFIG = { //埋点信息 statpid:{ //渠道类型
我已经用linux vm设置了一个私有管道,并且安装了代理,在门户中它显示代理处于活动状态。我还安装了docker。在同一台机器上,如果我使用sudo docker,它会工作。因此,我确信当VSTS代理运行该命令时,这是一个权限问题。不确定我需要给哪个用户分配哪个预任务,以便在我从VSTS初始化构建时运行docker命令。 尝试连接到处的Docker守护程序套接字时,权限被拒绝unix:///va