Node.js HTTP-сервер не может ответить на websocket

#node.js #http #websocket

#node.js #http #websocket

Вопрос:

http-сервер не отвечает на websocket

Я не могу заставить свой http-сервер отвечать на запросы websocket. Как мне правильно прослушивать эти события? на моем сервере запущен SPA, и я хотел бы попробовать использовать websockets для постоянной отправки обновленной информации из файла клиенту. Я успешно сделал это с помощью SSE, но мне интересно узнать о websockets.

Мой server.js имеет следующее

 const http = require('http');
const WebSocket = require('ws');

var server = http.createServer(function(request, response) {
   request.on('error', (err) => {
      console.error(err.stack);
   });
});

server.listen(8001);

const wss = new WebSocket.Server({ server });

wss.on('connection', function connection(ws) {
    ws.on('message', function message(msg) {
        console.log(msg);
      });
    });
});
  

мой client.js

 var wsClient = ()=>{
    const ws = new WebSocket('ws:' serverip '/WSindexJSON'); // this server is set through XHR request

    ws.onopen = function(e) {
       console.log("Connection established");
    };

    ws.addEventListener('open', () => {
      // Send a message to the WebSocket server
      ws.send('Hello!');
    });
    console.log("ws open",ws)

    ws.addEventListener('message', event => {
      // The `event` object is a typical DOM event object, and the message data sent
      // by the server is stored in the `data` property
      console.log('Received:', event.data);
    });
}
  

Я могу видеть клиентский websocket, созданный в Chrome developer network tools, но на сервер ничего не поступает.
Нужно ли мне создавать websocket на стороне сервера?

Я видел другой пример, в котором сервер прослушивает событие обновления. Я пробовал это без успеха.

 server.on('upgrade', function upgrade(request, socket, head) {
      const pathname = url.parse(request.url).pathname;
      console.log('server upgrade event websocket', pathname)
      if (pathname === '/WSindexJSON') {
        wss.handleUpgrade(request, socket, head, function done(ws) {
          wss.emit('connection', ws, request);
        });
      } else {
        socket.destroy();
      }
    });
  

Я также попробовал другой модуль websocket const WebSocketServer = require('websocket').server; и столкнулся с теми же вопросами.

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

1. Код вашего сервера закрыт некорректно!. Вам не хватает закрытия }); для httpServer — после исправления этого ваш код должен работать!

2. Спасибо, что заметили, что я отредактирую свой пример здесь. Это не мой полный код, просто краткое описание http-сервера. мой сервер работает, и я могу подключиться к нему, ответить с помощью GET POST и т. Д

Ответ №1:

Вам необходимо указать порт, на котором клиент попытается подключиться (в вашем случае 8001 ):

 var wsClient = ()=>{
    const ws = new WebSocket('ws:' serverip ':8001/WSindexJSON');
  

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

1. Спасибо, я был отсутствующим портом.