Simple Servers

Basic Server

server-basic.js
'use strict'

const http = require("http")
let count = 0
http.createServer(function(req, res) {
    const message = `Received ${++count} requests so far`
    console.log(message)
    res.writeHead(200, { "Content-Type": "text/plain" })
    res.end(message)
})
.listen(8080)

Run it: node server-basic.js

Test it: curl http://localhost:8080

Server with Pause

server-pause.js
'use strict'

const http = require('http')
http.createServer(function (req, res) {
	res.writeHead(200, { 'Content-Type': 'text/plain' })
	res.write('hello\n')
	setTimeout(function () {
		res.end('world\n')
	}, 2 * 1000)
}).listen(8080)

Run it: node server-pause.js

Bench it: ab -n 100 -c 100 http://localhost:8080/

Echo Server

server-echo.js
'use strict'

const net = require('net')
net.createServer(function (socket) {
	socket.write('Talk to me.\n')
	socket.on('data', function (data) {
		socket.write(data.toString().toUpperCase())
	})
}).listen(8080)

Run it: node server-echo.js

Talk with it: nc localhost 8080

Chat Server

server-chat.js
'use strict'

// Application
const net = require('net')
let sockets = []
net.createServer(function (socket) {
	sockets.push(socket)
	socket.write('Talk to me.\n')

	socket.on('data', function (data) {
		for (let i = 0; i < sockets.length; ++i) {
			sockets[i].write(data)
		}
	})

	socket.on('end', function () {
		const index = sockets.indexOf(socket)
		sockets = sockets.slice(0, index).concat(sockets.slice(index + 1))
	})
}).listen(8080)

Run it: node server-chat.js

Talk with it: nc localhost 8000

Supplemental

Echo Server with Transform Stream

server-echo-transform.js
'use strict'

class UC extends require('stream').Transform {
	_transform (data, encoding, next) {
		next(null, data.toString().toUpperCase())
	}
}

class Reverse extends require('stream').Transform {
	_transform (data, encoding, next) {
		next(null, data.toString().split('').reverse().join(''))
	}
}

require('net').createServer(function (socket) {
	socket.write('Talk to me.\n')
	socket.pipe(new UC()).pipe(new Reverse()).pipe(socket)
}).listen(8080)

Run it: node server-echo-transform.js

Talk with it: nc localhost 8080

Chat Server with Extras

server-chat-extra.js
'use strict'

// Application
const net = require('net')
let count = 0
const sockets = {}
function broadcast (message) {
	for (const key in sockets) {
		if (sockets.hasOwnProperty(key)) {
			sockets[key].write(message)
		}
	}
}
net.createServer(function (socket) {
	sockets[socket.index = count++] = socket
	socket.write('Hello user ' + socket.index + '\n')
	broadcast('User ' + socket.index + ' joined\n')

	socket.on('data', function (data) {
		broadcast('User ' + socket.index + ' says: ' + data.toString())
	})

	socket.on('end', function () {
		delete sockets[socket.index]
		broadcast('User ' + socket.index + ' left\n')
	})
}).listen(8080)

Run it: node server-chat-extra.js

Talk with it: nc localhost 8080

Last updated