【发布时间】:2020-08-22 02:10:00
【问题描述】:
我设置了一个活动和新频道:
class TaskCreated implements shouldBroadcast
{
use Dispatchable, InteractsWithSockets, SerializesModels;
public $task;
public function __construct(Task $task)
{
$this->task = $task;
}
}
并安装 Echo 并进行设置
import Echo from "laravel-echo"
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: 'pusher-key',
cluster: 'ap2',
encrypted: true
});
然后我在发布任务时调用 TaskCreated 事件
event(new TaskCreated($task));
但是,问题是 Echo 不听推送日志或任何东西。即使在 laravel-websockets 中,事件是作为 api 消息创建的。
这里是 vue js Echo 实现:
mounted () {
axios.get('/tasks').then(response => (this.tasks = response.data));
Echo.channel('taskCreated').listen('TaskCreated', (e) => {
console.log(e);
this.tasks.push(task.body)
});
在仪表板中:
api-message Channel: taskCreated, Event: App\Events\TaskCreated 19:01:55
更新
现在,当我尝试与 WS 连接时,连接状态等待 10 秒,然后出现错误 WebSocket 在连接建立之前已关闭。 AND 连接建立错误:net::ERR_CERT_AUTHORITY_INVALID。
请求网址:wss://127.0.0.1/app/local?protocol=7&client=js&version=6.0.2&flash=false
import Echo from "laravel-echo"
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
wsHost: window.location.hostname,
wssPort: 6001,
disableStats: true,
enabledTransports: ['ws', 'wss']
【问题讨论】:
-
你能检查一下控制台吗?可能有一些错误。
-
去掉
TaskCreated前面的点。点表示您有一个自定义命名事件。您可以通过在事件类中添加broadcastAs()函数并返回带有自定义事件名称的字符串来添加自定义名称。 -
@UzairRiaz 控制台中没有错误或日志。网络 - WS 状态为 101
-
DevTools failed to load SourceMap: Could not load content for http://127.0.0.1:8000/js/utf8.js.map: HTTP error: status code 404, net::ERR_HTTP_RESPONSE_CODE_FAILURE DevTools failed to load SourceMap: Could not load content for chrome-extension://ndjpnladcallmjemlbaebfadecfhkepb/editor/config.js.map: HTTP error: status code 404, net::ERR_UNKNOWN_URL_SCHEME DevTools failed to load SourceMap: Could not load content for chrome-extension://ndjpnladcallmjemlbaebfadecfhkepb/editor/content.js.map: HTTP error: status code 404, net::ERR_UNKNOWN_URL_SCHEME -
您能否确认事件是否从后端触发?在 {base_ur}/laravel-websockets 查看 laravel-websockets 仪表板。另外,laravel echo 不断的向wss:{url} 和ws:{ur} 发送请求,如果不运行
php artisan websockets:serve,会在控制台报错所以检查这些错误并将它们发布在这里。您还可以通过将过滤器设置为所有请求来检查这些请求,从而在浏览器开发工具中检查网络。
标签: php laravel vue.js laravel-7 laravel-websockets