Opa! Tudo bem, Vinicius?
Antes de tudo, acho que você precisar dar uma organizada na sua stack.
Você está utilizando PHP (back-end) e Node.js (back-end) simultaneamente. Acredito que isso deixa sua stack pouco efetiva.
Você pode utilizar PHP no back-end (server-side) e usar JavaScript no front-end (client-side), assim como também pode user Node.js no back-end e JavaScript no front-end.
Utilizando socket, o que você pode fazer é um loop no seu server (PHP ou Node.js) emitindo os timestamps atualizados pro socket aberto. Mas essa parece ser uma péssima opção. Você teria que manter um socket aberto para cada contador regressivo pra cada usuário etc. e isso afetaria fortemente sua escalabilidade.
A solução que eu sugiro ser mais efetiva seria essa:
1. No load da página, fazer um request pro server, buscar o timestamp e o ID do contador
2. Executar o loop/recursão client-side para ir decrescendo o contador
Nesse caso você não pode esquecer de validar no server-side todas as requisições do client pra saber se o leilão continua operante.
Caso você queira, você poderia usar socket para emitir o fim do leilão, assim você notificaria o client que o leilão terminou. Mas não acho que isso seja imprescindível.
Espero ter ajudado.
Abs,