问题标题可能有点混乱,我尽我所能解释它。Laravel Echo重复n次收听活动已广播
我有laravel-echo-server
,redis
(用于排队)和Laravel echo
设置。我想要的只是通过输入发送消息,并为页面上的每个人更新消息源;基本上是一个聊天室。
一切正常,除了它速度缓慢,但我是Laravel Echo
和Vue
。
如果我发送了一条消息,那很好,但是当我发送另一条消息时,我得到两个响应。发送第三条消息三个响应,等等......
我究竟在做什么错误?我检查过socket.io
/laravel-echo-server
只连接到通道一次,而我的broadcast
只发送一次(检查队列工作者只处理请求),那么它如何以指数形式重复?
这是我app.js:
const chatWindow = new Vue({
el: '#chatWindow',
data: {
messages: []
},
methods: {
sendMessage: function() {
this.$http.post('/chat', {message: this.message}).then((response) => {
window.Echo.channel('test-chat-channel')
.listen('MessageSent', (event) => {
console.log(event.message);
// this.messages.push(event.message);
});
}, (response) => {
// error callback
});
this.message = '';
}
},
props: ['message']
});
这是我聊天视图:
<div id="chatWindow" class="col-sm-7">
<h1 class="text-center no-top">Chat</h1>
<div class="chat-window">
<ul>
<li v-for="message in messages">@{{ message }}</li>
</ul>
<div class="form-group">
<input title="Send Message" v-model="message" @keyup.enter="sendMessage" class="form-control" placeholder="Send message...">
</div>
</div>
</div>
万一他们相关的,这里是我路线:
Route::post('/chat', function (Request $request) {
event(new MessageSent($request->message));
});
我事件:
<?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;
class MessageSent implements ShouldBroadcast
{
use InteractsWithSockets, SerializesModels;
public $message;
public function __construct($message)
{
$this->message = $message;
}
public function broadcastOn()
{
return new Channel('test-chat-channel');
}
}
我想你可能会在这里。我认为我应该做的是将listen方法分开,而不是在成功请求的响应回调中进行......这可能是导致此问题的原因 - 我实际上并不需要响应回调,只是一个错误回调,并且在请求之外侦听事件以避免超额订阅。谢谢你,我会给你一个机会,让你知道! –
@ A.Appleby对我来说,这看起来很可能。 –
@ A.Appleby最近怎么样?你解决了吗?我是否能帮助? –