Zhang Zhan
Zhang Zhan

Reputation: 905

NodeJS WebSocket goes straight to close after connection is open

This is my websocket server side code:

 wss = new WebSocketServer({
  server: server,
  path: '/chat'
 });

 console.log('Web Socket Server is created');
 wss.on('connection', function (ws, request) {
  console.log('Connection is called');
  … 
 });
 wss.on('message', function (message) {
  console.log('onMessage data: ' + message);
 });
 wss.on('close', function(code, reason) {
        console.log('ws is closed with code: ' + code + ' reason: '+ reason);
 });

This is my websocket client side code:

ws = new WebSocket("ws://{{host}}/chat");
   ws.onopen = function () {
    // Web Socket is connected, send data using send()
    ws.send("Message to send");
    console.log("Websocket is open...");
   };
   ws.onmessage = function (evt) {
    var received_msg = evt.data;
    console.log("Message is received: " + received_msg);
   };
   ws.onclose = function () {
    // websocket is closed.
    console.log("Connection is closed...");
   };

I don't understand why in the browser when I see the console output is:

[Log] Websocket is open... 
[Log] Connection is closed... 

The connection goes straight to close after opening. On server side I only see "Connection is called" output.

I don't understand why the connecrtion is closed on client side and I don't understand why when the connection is closed by client, server side 'close' event is not triggered.

Upvotes: 0

Views: 1319

Answers (1)

mayakwd
mayakwd

Reputation: 538

You are listening events 'message', 'close' on the wrong target. After creating a connection you should start listening messages from it:

 wss = new WebSocketServer({
  server: server,
  path: '/chat'
 });

 console.log('Web Socket Server is created');
 wss.on('connection', function (ws, request) {
   console.log('Connection is called');
   ws.on('open', function (message) {
     console.log('ws connection opened!');
   });
   ws.on('message', function (message) {
     console.log('onMessage data: ' + message);
   });
   ws.on('close', function(code, reason) {
     console.log('ws is closed with code: ' + code + ' reason: '+ reason);
   });
 });

Upvotes: 1

Related Questions