[Interest] QtWebsocket and Node.js
Nuno Santos
nunosantos at imaginando.pt
Mon Jun 25 15:29:19 CEST 2018
Jason,
Thanks for your reply.
I have used ws module directly without Primus and I’ve been able to establish communication between Qt and Node.
I still don’t know what is causing the problem with Primus, but for now I don’t care anymore! ;)
Thanks,
Best,
Nuno
> On 25 Jun 2018, at 14:26, Jason H <jhihn at gmx.com> wrote:
>
> 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" <nunosantos at imaginando.pt>
> To: "Qt Project MailingList" <interest at 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 at qt-project.org http://lists.qt-project.org/mailman/listinfo/interest <http://lists.qt-project.org/mailman/listinfo/interest>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20180625/9cd9f6d7/attachment.html>
More information about the Interest
mailing list