Did you ever call liten on the server side? Literally server.listen(); I used a different module, express-ws.
 
You need to have something listening on the port, then the server can map the incomming request to the correct handler. I use the following (incomplete code) to broadcast activity to all connected clients.
"use strict";
 
//my modules
const db = require('./database');
const path = require('path');
const config = require('./config');
 
// for multithreading
const cluster = require('cluster');
 
if (cluster.isMaster) {
  console.log(process.cwd())
 
  const con = db.connect();
  db.init(con);
  cluster.fork();
 
} else {
 
  const express = require('express');
  const app = express();
  const expressWs = require('express-ws')(app);
  app.ewss = expressWs;
 
  const compression = require('compression');
  app.use(compression());
 
  const bodyParser = require('body-parser');
 
  app.use(bodyParser.urlencoded({ extended: true }));
  app.use(bodyParser.json());
 
  const multer  = require('multer');
  const upload = multer({ dest: config.uploadDir });
  app.use(upload.any());
 
  app.get('/', function (req, res) {
    res.send('Hello World!');
  });
 
 
//I have my own module/endpoint registration API, this is that.
  var modules = [];
  for(var class_name of ['a', 'b', 'c']) {
    var clazz = require('./'+class_name);
    modules.push(new clazz(app));
  }
 
  app.listen(config.port, function () {
    console.log('Example app listening on port '+ config.port);
  });
 
Meanwhile in my 'c' module:
class c {
...
      '/c/activity': {
        'ws': this.activity // 'ws' is the method like GET, POST, etc.
      }
...
  async activity(ws ,resp) {
    ws.on('open', () => {
      console.log('ws client opened');
    })
    ws.on('close', () => {
      console.log('ws client closed');
    })
 
  }
 
  broadcast (wss, data) {
    wss.clients.forEach(function each(client) {
      if (client.readyState === WebSocket.OPEN) {
        client.send(data);
      }
    });
  }
 
Then, to use broadcast in a function in my c class
this.broadcast(this.app.ewss.getWss(), JSON.stringify(req.body)); 
Sent: Sunday, June 24, 2018 at 1:02 PM
From: "Nuno Santos" <nunosan...@imaginando.pt>
To: "Qt Project MailingList" <interest@qt-project.org>
Subject: [Interest] QtWebsocket and Node.js
Hi,
 
I’m trying to establish a connection between a QtWebsocket client and a Node.js websockets server. I’m using the bare minimum. On the Node.js side I’m. Using Primus to be able to easily switch to other web sockets implementations. S far I have only tried with websockets implementation and the source code resumes to the following lines:
 
'use strict';
 
var Primus = require('primus');
var http = require('http');
 
var server = http.createServer();
var primus = new Primus(server, { transformer: 'websockets' });
 
primus.on('connection', function(socket) {
  socket.on('data', function ping(message) {
    console.log('received a new message', message);
    socket.write({ ping: 'pong' });
  });
});
 
server.listen(8080);
 
And on the Qt side:
 
connect(&_webSocket, SIGNAL(connected()), this, SLOT(onConnected()));
connect(&_webSocket, SIGNAL(disconnected()), this, SLOT(onDisconnected()));
connect(&_webSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(onError(QAbstractSocket::SocketError)));
 
_webSocket.open(QUrl("ws://localhost:8080"));
 
Where:
 
void Controller::onConnected()
{
    qDebug() << "on connected";
}
 
void Controller::onDisconnected()
{
    qDebug() << "on disconnected";
}
 
void Controller::onError(QAbstractSocket::SocketError error)
{
    qDebug() << "error" << error;
}
 
 
When I start the Qt app with the server already running nothing gets printed out to console.
 
However… if I stop the server it displayed the following lines on the Qt app side:
 
error QAbstractSocket::RemoteHostClosedError
on disconnected
 
Has anyone stumbled on a similar problem before?
 
Thanks,
 
Regards,
 
Nuno
 
_______________________________________________ Interest mailing list Interest@qt-project.org http://lists.qt-project.org/mailman/listinfo/interest
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to