Я бы отдел предпочтению в пользу отказа от воркера. Такой подход имеет место быть только если у вас очень большие JSON. Настолько большие или так много, что время на их обработку заметно невооруженным взглядом.
Если же это нетак, тогда, как по мне, было бы удобнее держать сокет в основном потоке. Это даст возможность всем компонентам независимо друг от друга подписываться на разные события. Что-то в таком духе:
// socketFactory.js
let ws = null
export function getSocket() {
if (!ws) ws = new WebSocket('wss://someaddr');
return ws
}
// SomeComponent.vue
import {getSocket} from 'socketFactory.js'
const ws = getSocket()
export default defineComponent({
created() {
ws.onmessage(message => {
if ( ... ) {
// Делаем что-то с сообщением
this.onMessageHandled(message)
}
})
},
})
Таким образом каждый компонент может общаться с сокетом не зависимо. При этом отпадает нужда во Vuex. Мой пример далёк от идеала, тут стоило бы вообще сокет вынести на ещё один слой абстракции, но я надеюсь идею вы поняли.
И подчеркну, что это всё может быть вредно, так как я не знаю всей вашей архитектуры.