我试图保持只有一个连接活动每个用户谁打开多个选项卡上我的应用程序,使用推与Laravel回声,我能够得到它的工作在一个测试项目下面的文章和示例项目。
https://blog.pusher.com/reduce-websocket-connections-with-shared-workers/https://github.com/pusher-community/pusher-with-shared-workers
但我有一个困难的时间试图适应它与我的Laravel项目,我应该怎么做?
这是我添加到引导中的配置。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,
encrypted: true
});
$.getJSON( "/heartbeat", function( json ) {
window.Echo.channel('user.' + json.user_id).listen('NotifyUser', e => {
displayModal(e.msg);
console.log('User with an id of ' + e.id + ' has been notified.');
console.log(e);
// Relay the message on to each client
clients.forEach(function(client){
client.postMessage(data);
});
});
});
self.addEventListener("connect", function(evt){
// Add the port to the list of connected clients
var port = evt.ports[0];
clients.push(port);
// Start the worker.
port.start();
});
它正在工作,但不是我想要的方式,它正在为每个打开的选项卡创建一个新连接。
如您自己提供的链接中所述:https://blog.pusher.com/reduce-websocket-connections-with-shared-workers/,您需要导入特定版本的pusher才能使用worker:pusher。工人js
。
所以,去这里:https://github.com/pusher/pusher-js/tree/master/dist/worker
并下载推送程序。工人min.js
。将它放在与boostrap相同的目录中。js
并需要它。而不是:
window.Pusher = require('pusher-js');
使用
importScripts("pusher.worker.min.js");