Есть ли способ инициировать сокет.событие подключения ввода-вывода из NodeJS?

#javascript #node.js #sockets #express #socket.io

#javascript #node.js #сокеты #выразить #socket.io

Вопрос:

Я пытаюсь кое-что сделать с socket.ввод-вывод на NodeJS, и я не могу понять, как запустить сокет (только) из NodeJS.

До сих пор я использовал сокет.ввод-вывод путем вызова его из интерфейса, но мне интересно, возможно ли сделать то же самое, что я сделал во внешнем интерфейсе, но на этот раз в части NodeJS (на стороне сервера).

Я предполагаю, что это невозможно, потому что требуется своего рода соединение (мне нравится называть это TCP-соединением, но я не уверен, правда это или нет), и без второго участника соединения сокет не будет работать.Это мое предположение.

Итак, что я сейчас делаю, это :

app.js (файл сервера)

  ...
 const ioLib = require('./path/io.js')(io);
 ...
 ...
 ...
  

path/io.js (файл сокета)

  module.exports = function(io){

 io.on('connection', async function(socket) {
 console.log('socket talks : a user connected');
 ...
 ...
 });

 module.exports.io = io;

 }
  

И из файла file.ejs я делаю :

 var socket = io("url");
  

Итак, с этим, давайте назовем это схемой, я делаю следующее :

Когда я захожу на эту веб-страницу, в сокетах запускается событие ‘connection’. У меня такой вопрос, и я пытаюсь сформулировать его как можно проще: как я могу сделать то же самое, но без веб-страницы?Возможно ли инициировать сокеты внутри NodeJS?

Что вы думаете?

Комментарии:

1. вам нужен клиент узла websocket, например: npmjs.com/package/socket.io-client#nodejs-server-side-usage КСТАТИ: подумайте, нужна ли вам эта большая библиотека. WS поддерживается всеми браузерами, выпущенными за последние несколько лет.

2. Еще раз здравствуйте, сэр, спасибо, что помогли мне еще раз. Я попробую это

Ответ №1:

Возможно подключить сокет.Сервер ввода-вывода из автономного Node.js приложение (на самом деле не имеет значения, где оно выполняется), а не веб-интерфейс, доступ к которому осуществляется через веб-браузер. Для достижения этого вам следует использовать socket.io-client . Пример использования клиентом может быть следующим:

 // Node.js app: client.js
const io = require('socket.io-client');
const socket = io.connect('http://SERVER_IP:SERVER_PORT', {
    reconnect: true
});

socket.on('connect', function (socket) {
    console.log('Connected to the server!');    
});

socket.emit('connected', 'Hi from the client side!');  
  

В этом случае ваше серверное приложение должно включать что-то вроде следующего:

 // Node.js app: server.js
io.on('connection', function(socket) {
   console.log('socket talks: a user connected');

   // Print the message that comes from the socket client
   socket.on('connected', function (msg) {
      console.log(msg);
   });
});   
  

Как вы можете видеть выше, в принципе, архитектура остается такой же, как сервер-клиент. Теперь давайте сделаем еще один шаг вперед и поместим все эти коды в один js-файл и посмотрим, как это работает:

 // server/client together: crazy-socketapp.js
const io_server = require('socket.io').listen(3030);
io_server.sockets.on('connection', function (socket) {
    console.log('A client is connected!');
    socket.on('connected', function (msg) {
        console.log(msg);
    });
});

const io_client = require('socket.io-client');
const socket = io_client.connect('http://localhost:3030', {
    reconnect: true
});

socket.on('connect', function (socket) {
    console.log('Connected to the server!');    
});

socket.emit('connected', 'Hi from the client side! ');
  

Выходные данные приложения:

 > A client is connected! 
> Connected to the server! 
> Hi from the client side!
  

Надеюсь, это поможет!