Как socket.io и REST обрабатывают запрос - PullRequest
0 голосов
/ 14 января 2020

У меня есть приложение nodejs, и теперь я сталкиваюсь с проблемой спама. Когда я пытаюсь спамить мой сокет api, приложение отключается и больше не может получить ответ от сервера. Но если я изменил на REST API, приложение все еще работает хорошо, даже если я продолжаю рассылать спам конечной точке API.

Socket API (только одно соединение):

// Get client message
socket.on('message', function (data) {
    socket.emit('response', "Hi");  // Emit message to client 
}

REST API с express:

app = express();
app.post('/test', function (req, res) {
    res.json({msg: "Hi"});  // Response message to client
}

Итак, мой вопрос, как эти два обрабатывают запросы? В чем разница между ними в низкоуровневой реализации? Мне действительно нужна помощь в этом, я изучил множество справочных онлайн и сетевых книг, но до сих пор не могу найти ни ответа, ни топи c разговоров о том, как сокеты и REST API обрабатывают запросы в низкоуровневой реализации. И как эти спам-запросы ставятся в очередь?

РЕДАКТИРОВАТЬ:

Спам-код:

// Socket spamming app:
var socket = io.connect('ws://localhost:9001');
socket.on('connect', function (socket) {
    for(i=0;i<1000000;i++)
        socket.emit('message',"hi server");
});
socket.on('message', function (msg) {
    // won't receive any msg after socket down during spamming
    console.log(msg) 
});



// REST API endpoint spamming
const request = require('request');
function spam() {
  const a = new Promise((resolve, reject) => {
    request.post({
      url: `http://localhost:8080/test`,
    }, function (err, httpResponse, body) {
        ...
    })
  });
  console.log(a) // Every responses works fine
}
for (let i = 0; i < 1000000; i++) {
  spam();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...