Concepts
Networking
TCP and UDP networking
nx.js provides APIs for TCP and UDP networking. The TCP socket interface is based on the WinterCG Socket API proposal. UDP datagrams are supported via Switch.listenDatagram().
TCP Client
// "tcpbin.com" is a public TCP echo server
const socket = Switch.connect('tcpbin.com:4242');
const decoder = new TextDecoder();
const encoder = new TextEncoder();
const reader = socket.readable.getReader();
const writer = socket.writable.getWriter();
const payload = 'Hello World!\n';
console.log('Sending: %j', payload);
await writer.write(encoder.encode(payload));
console.log('Received: %j', decoder.decode(await reader.read()));
// Prints "Hello World!\n"
await writer.close();
reader.releaseLock();
socket.close();TCP Server
// A simple echo server
const port = 2323;
const server = Switch.listen({
port,
async accept(socket) {
console.log('Client connection established');
const reader = socket.readable.getReader();
const writer = socket.writable.getWriter();
for await (const chunk of reader) {
if (chunk.done) break;
await writer.write(chunk.value);
}
await writer.close();
reader.releaseLock();
console.log('Client closed connection');
},
});
const { ip } = Switch.networkInfo();
console.log('Echo server listening on "%s:%d"', ip, port);UDP Datagram Socket
const socket = Switch.listenDatagram({
port: 9999,
message(e) {
console.log(`From ${e.remoteAddress}:${e.remotePort}:`, e.data);
socket.send('pong', e.remoteAddress, e.remotePort);
},
});
const addr = socket.address;
console.log(`Listening on ${addr.address}:${addr.port}`);Broadcast
const socket = Switch.listenDatagram({ port: 9999 });
socket.setBroadcast(true);
socket.send('hello network', '255.255.255.255', 9999);Multicast
const socket = Switch.listenDatagram({
port: 5353,
message(e) {
console.log('Multicast message:', e.data);
},
});
socket.addMembership('239.255.255.250');