I saw "qodejs/README" write:
When a Gui message loop is injected, qode will use it as the primary event loop and will process NodeJs requests on the main thread as an when it arrives by listening to the libuv's events.
I write UDP communication example, repeated bounce between server/client, test event-loop performance difference, like this:
Clinet -> Server -> Client -> Server ...
example code: index.ts
import { QMainWindow, QWidget, QLabel, FlexLayout, QPushButton, QIcon } from '@nodegui/nodegui';
import logo from '../assets/logox200.png';
const win = new QMainWindow();
win.setWindowTitle("Hello World");
const centralWidget = new QWidget();
centralWidget.setObjectName("myroot");
const rootLayout = new FlexLayout();
centralWidget.setLayout(rootLayout);
const button = new QPushButton();
button.setIcon(new QIcon(logo));
rootLayout.addWidget(button);
win.setCentralWidget(centralWidget);
win.show();
(global as any).win = win;
//---------------------------------------------------------
// UDP Test
const net = require('net')
let qps = 0
let start = new Date()
let UDP_PORT = 9022
let strmsg = "";
let strlen = 1024*1; // 1KB
for( let i = 0; i < strlen; i ++ ) {
strmsg += "0"
}
let message = Buffer.from(strmsg);
//------------------------
// UDP Server
import dgram = require("dgram");
const udp_server = dgram.createSocket("udp4");
udp_server.on("message", (msg:Buffer, rinfo:dgram.RemoteInfo) => {
udp_server.send( message, rinfo.port, rinfo.address )
let now = new Date()
if( now.getTime() - start.getTime() >= 1000 ) {
console.log( "qps: %s", qps )
start = now
qps = 0
}
qps ++;
});
udp_server.on('error', (err:Error) => {
udp_server.close();
})
udp_server.on("listening", () => {
let address = udp_server.address();
});
//------------------------
// UDP Client
const udp_client = dgram.createSocket('udp4');
udp_client.on("message", (msg:Buffer, rinfo:dgram.RemoteInfo) => {
udp_client.send( msg, UDP_PORT, "127.0.0.1" )
});
udp_server.bind(UDP_PORT, () => {});
The difference in results is enormous, on my laptop (Macbook/M1/arm64):
default node.js: "qps" 5w-6w (comment out the lines above)
after use node-gui: "qps" 2w-3w
I saw "qodejs/README" write:
When a Gui message loop is injected, qode will use it as the primary event loop and will process NodeJs requests on the main thread as an when it arrives by listening to the libuv's events.I write UDP communication example, repeated bounce between server/client, test event-loop performance difference, like this:
example code: index.ts
The difference in results is enormous, on my laptop (Macbook/M1/arm64):
default node.js: "qps"
5w-6w(comment out the lines above)after use node-gui: "qps"
2w-3w