создание TCP-соединения клиент-сервер в узле: socket.io или сетевой модуль

Я новичок в узле, и я хотел бы создать TCP-соединение между клиентом и сервером, используя node.js. У меня уже есть http-сервер, построенный на узле, который отправляет/извлекает данные клиенту и от него. Теперь мне нужно добавить эту концепцию, ориентированную на «соединение».

Я читал учебники и форумы, и я немного смущен. Если я правильно понял, есть два способа создания такого соединения:

  • обновление моего уже существующего http-сервера до сервера socket.IO

    var app = require('http').createServer(handler);
    var io = require('socket.io').listen(app);
    function handler(req, res){
       //code
    }
    app.listen(8080);
    
  • создав отдельный TCP-сервер на основе сетевого модуля, затем установите соединение между этим TCP-сервером и http-сервером, как это предлагается здесь Создать WebSockets между TCP-сервером и HTTP-сервером в node.js

    var net = require('net');
    net.createServer(function (socket) {
       socket.write('Hello World!\r\n');
       socket.end();
     }).listen(1337);
    

Итак, когда нам нужно создать 2 отдельных сервера TCP и HTTP, а когда нам нужно иметь только один сервер (обновите HTTP-сервер до socket.IO)?


person user1499220    schedule 11.12.2013    source источник


Ответы (2)


Если вашими клиентами являются браузеры, то единственный вариант — использовать WebSockets (такую ​​реализацию предоставляет socket.io).

Браузеры не имеют API, который можно использовать для открытия необработанных сокетов TCP, что дает вам модуль net.

person josh3736    schedule 11.12.2013
comment
так что просто чтобы убедиться ... мы используем сетевой модуль, только если клиенты не являются браузерами? - person user1499220; 12.12.2013
comment
Ну не совсем. Вы используете net, если вам нужно использовать необработанную связь сокета TCP. Вы можете использовать socket.io, если хотите реализовать двунаправленный обмен сообщениями в реальном времени поверх HTTP. Даже если ваши клиенты не являются браузерами, существуют реализации клиентов WebSocket/socket.io для небраузерных сред. Правильный выбор для вашего приложения действительно зависит от того, чего именно вы пытаетесь достичь, от того, какие функции и совместимость вам нужны, а также от того, с какими сетями вы имеете дело. - person josh3736; 12.12.2013
comment
Это помогло. Спасибо! - person user1499220; 12.12.2013
comment
Будет ли разница в производительности при использовании socket io и net с собственными приложениями Android/IOs для приложения чата? - person Max; 29.09.2015

WebSockets не имеют ничего общего с TCP-соединениями (кроме того, что они их используют). Если вы просто хотите открыть обычное TCP-соединение, встроенный пакет net — это то, что вам нужно.

Socket.IO — это пакет RPC, который использует либо WebSockets, либо эмулированные WebSockets вместо других транспортных средств, таких как JSON с длительным опросом.

person Brad    schedule 11.12.2013