DEV Community

Gabriel de Paula Queiroz
Gabriel de Paula Queiroz

Posted on

3 1

Socket.io + Bull 📨

Introdução

Recentemente tive uma certa dificuldade na implementação de um socket em uma queue.
Precisava que ao completar o processo da queue, o servidor se comunicasse com o client, e como sou um desenvolvedor que está começando a mexer com node.js, consegui solucionar o problema com as ferramentas que tenho ao meu alcançe.

Modificando o Socket.io 🔧

O primeiro passo foi adaptar o socket. Segui a orientação de um amigo, onde ele mostra como faz o desacoplamento.

How to uncouples emit events from connection event into socket.io

Mas como nem tudo cai do céu, precisei fazer algumas alterações...

const socketio = require('socket.io');

let instance = null;

class SocketService {
    static Initialize(server) {
        instance = socketio(server);
        instance.on('connection', socket => {
            console.log('connected');
        });

        return instance;
    }

    static getInstance() {
        return instance;
    }
}

module.exports = SocketService;
Enter fullscreen mode Exit fullscreen mode

Alterando o app.js 🔁

No app.js inicializei o SocketService, e com isso consegui ter uma instância da biblioteca para usar em qualquer lugar do sistema.

const express = require('express');
const http = require('http');
const SocketService = require('./services/SocketService');

const app = express();
const server = http.Server(app);

app.set('socketService', SocketService.Initialize(this.server));

app.use(express.json());

server.listen(3333);
Enter fullscreen mode Exit fullscreen mode

E como vou aplicar isso na fila? 🦏

É bem simples, basta pegar a instância que foi criada no app.js!

Caso queira saber mais sobre o bull, clique aqui

const alertQueue = new Queue(AlertQueue.key, redisConfig);
const socket = Socket.getInstance();

alertQueue.on('completed', job => {
    socket.emit('message', 'Mensagem que será entregue ao client.');
});

Enter fullscreen mode Exit fullscreen mode

Conclusão 🙌🏽

Espero que possa ter ajudado de alguma maneira e fique a vontade para entrar em contato caso tenha alguma duvida!

SurveyJS custom survey software

Build Your Own Forms without Manual Coding

SurveyJS UI libraries let you build a JSON-based form management system that integrates with any backend, giving you full control over your data with no user limits. Includes support for custom question types, skip logic, an integrated CSS editor, PDF export, real-time analytics, and more.

Learn more

Top comments (2)

Collapse
 
paulocastellano profile image
Paulo Castellano

boa!

Collapse
 
wakeupmh profile image
Marcos Henrique

Monstro demais

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs