Socket.io 客户端仅响应一次



我正在创建一个快速服务器,这将导致索引.html页面在收到 post 请求时重定向到新页面。一切正常,但只是第一次。我必须定期重新启动服务器才能正常工作。下面是一些代码片段。

//server.js
const app = express();
app.use(express.static(`${__dirname}/public`));
const server = http.createServer(app);
const io = socketIo(server, {'force new connection': true });
io.on('connection', (socket) => {
    console.log('New client connected');
    app.post('/redirect', (req,res) => {
        socket.emit('redirect');
        res.status(200).send('Redirected');
    });
});
<body>
   <!-- Jquery CDN -->
   <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
   <!-- Socket.IO -->
   <script src="/socket.io/socket.io.js"></script>
   <script>
   let socket = io.connect({'force new   connection': true });
   socket.on('connect', () => {
       console.log('Connected to Server');
   });
   socket.on('redirect', () => {
       window.location.replace("https://google.com");
   });
   </script>
</body>

主要问题是您的路由位于套接字连接侦听器中。一个路由只能注册一次。并且connection被多次触发。

const app = express();
app.use(express.static(`${__dirname}/public`));
const server = http.createServer(app);
const io = socketIo(server, {'force new connection': true });
app.post('/redirect', (req,res) => {
    res.status(200).send('Redirected');
    io.emit('redirect');
    // io.to(someSocketOrRoom).emit('redirect');
});
io.on('connection', (socket) => {
    console.log('New client connected');     
});
如果要在收到来自套接字

外部的消息时向套接字发出,在本例中为 HTTP Post。您需要使用 io.emit 向所有套接字发出,或使用io.to().emit向特定套接字发出

现在,使用 socket.io 重定向没有多大意义,如果您要发布到 /redirect 为什么不使用 res.redirect 重定向用户,而不发出任何内容。

最新更新