Skip to content

Commit 688d243

Browse files
committed
adding websocket support
1 parent b62e07d commit 688d243

File tree

4 files changed

+101
-15
lines changed

4 files changed

+101
-15
lines changed

README.md

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -38,20 +38,17 @@ GET /echo/10/ms 200 - - 10.244 ms
3838
...
3939
```
4040
41-
# Implementation
42-
```js
43-
const restana = require('restana')
44-
const morgan = require('morgan')
45-
46-
const service = restana()
47-
service.use(morgan('tiny'))
41+
# WebSocket support
42+
The service will accept WebSocket connections on port 3000, incoming messages will be echoed back to client.
4843
49-
service.get('/echo/:latency/ms', (req, res) => {
50-
const { latency } = req.params
44+
## Example:
45+
(Chrome browser example)
46+
```js
47+
ws = new WebSocket('ws://localhost:3000/echo')
48+
ws.onmessage = (msg) => console.log(msg)
5149

52-
res.setHeader('x-added-latency-ms', latency)
53-
setTimeout(() => res.send(req.headers), latency)
54-
})
50+
ws.send("Hello World")
5551

56-
service.start(3000)
52+
// Incoming message printed in console:
53+
// MessageEvent {isTrusted: true, data: 'Hello World', origin: 'ws://localhost:3000', lastEventId: '', source: null, …}
5754
```

index.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
const restana = require('restana')
22
const morgan = require('morgan')
3+
const http = require('http')
4+
const WebSocket = require('faye-websocket')
35

4-
const service = restana()
6+
const server = http.createServer()
7+
const service = restana({
8+
server
9+
})
510
service.use(morgan('tiny'))
611

712
service.get('/echo/:latency/ms', (req, res) => {
@@ -11,4 +16,21 @@ service.get('/echo/:latency/ms', (req, res) => {
1116
setTimeout(() => res.send(req.headers), latency)
1217
})
1318

19+
server.on('upgrade', function (request, socket, body) {
20+
if (WebSocket.isWebSocket(request)) {
21+
let ws = new WebSocket(request, socket, body)
22+
console.log(`${new Date().toISOString()} - WebSocket connection started`)
23+
24+
ws.on('message', function (event) {
25+
console.log(`${new Date().toISOString()} - Echoing WebSocket message...`)
26+
ws.send(event.data)
27+
})
28+
29+
ws.on('close', function (event) {
30+
console.log(`${new Date().toISOString()} - WebSocket connection closed {code: "${event.code}", reason: "${event.reason}"}`)
31+
ws = null
32+
})
33+
}
34+
})
35+
1436
service.start(3000)

package-lock.json

Lines changed: 66 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "echo-api",
3-
"version": "1.0.0",
3+
"version": "1.1.0",
44
"description": "Basic Echo API to help debugging API gateway solutions and introduce artificial latency",
55
"main": "index.js",
66
"scripts": {
@@ -23,6 +23,7 @@
2323
},
2424
"homepage": "https://github.com/BackendStack21/echo-api#readme",
2525
"dependencies": {
26+
"faye-websocket": "^0.11.4",
2627
"morgan": "^1.10.0",
2728
"restana": "^4.9.5"
2829
}

0 commit comments

Comments
 (0)