我正在尝试在Laravel 5.4中的两个人之间用Pusher进行聊天。推送订阅错误。 Laravel
首先,我送一个Ajax post请求:
$('#btn-chat').click(function(){
$.post('sendMessage',{
_token: $("[name='csrf-token']").attr('content'),
user_id: userId,
chat_id: 1,
message: $('#btn-input').val()
},
function(data) {
console.log(data);
});
});
然后,控制器接受请求:
public function sendMessage(Request $request){
$user = Auth::user();
$message = new Message;
$message->fill($request->all());
$message->message = $request->message;
$message->save();
broadcast(new MessageSent($message))->toOthers();
return 'Return MessageController';
}
而且,这里是我的MessageSent事件:
class MessageSent implements ShouldBroadcast {
use Dispatchable, InteractsWithSockets, SerializesModels;
public $message;
public function __construct($message) {
$this->message = $message;
}
public function broadcastOn() {
return new PrivateChannel('chat.'.$this->message->chat_id);
}
}
和我的channels.php文件:
Broadcast::channel('App.User.{id}', function ($user, $id) {
return (int) $user->id === (int) $id;
});
Broadcast::channel('chat.*', function ($user, $chat_id) {
return (int) $user->id === (int) $chat_id;
});
最后,JavaScript的监听事件:
var pusher = new Pusher('pusher_key', {
cluster: 'us2',
encrypted: true,
authEndpoint: 'broadcasting/auth',
auth: {
headers: {
'X-CSRF-Token': $("[name='csrf-token']").attr('content')
}
}
});
Pusher.logToConsole = true;
var channel = pusher.subscribe('private-chat.1');
channel.bind('MessageSent', (data) => {
alert(data.message);
});
所有应该在工作,但是当我加载聊天页面,它抛出一个错误的JavaScript控制台上:
Pusher : No callbacks on private-chat.1 for pusher:subscription_error
我的问题就解决了。至少有一天我有这个问题,在发布这个问题之前,我试图自己解决它。让我尽快解释我的解决方案,soryy。 –