bootstrap.js
import Echo from 'laravel-echo'; window.Pusher = require('pusher-js'); window.Echo = new Echo({ broadcaster: 'pusher', key: process.env.MIX_PUSHER_APP_KEY, cluster: process.env.MIX_PUSHER_APP_CLUSTER, wsHost: window.location.hostname, wsPort: 8000, forceTLS: true // forceTLS: false, });
view
<script src="/js/app.js"></script> <script> new Vue({ el: '#chat', data: { message: '', messages: [] }, methods: { getMessages(){ const url = '/ajax/chat'; axios.get(url) .then((response)=>{ this.messages = response.data; }) }, send(){ const url = '/ajax/chat'; const params = { message: this.message}; axios.post(url, params) .then((response) => { this.message = ''; }); } }, mounted(){ this.getMessages(); Echo.channel('chat') .listen('MessageCreated', (e) =>{ this.getMessages(); }); } }); </script>
メッセージを送信しても反応しないので、何があかんねん、と思っていたら、コンソールを見て、websocketのconnection failedが出ていなければ、socket通信はできている。
再度ソースコードを見直していたところ、EventでprivateChannelになっているところを、priveteを外したら反応するようになった。
Event/MessageCreated.php
public function broadcastOn() { return new Channel('chat'); }
一日中悩んでトラブルシューティングできなくて愕然としてたが、解決する時は一瞬だ。
さあ、チャットのフロント作るぞー