Skip to content

Commit 5b9bdbb

Browse files
committed
Add examples for using with existing http servers
Fixes #2
1 parent 859dee3 commit 5b9bdbb

1 file changed

Lines changed: 62 additions & 2 deletions

File tree

README.md

Lines changed: 62 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ The [raison d'être](https://en.wiktionary.org/wiki/raison_d%27%C3%AAtre) for th
1010

1111
**Note**: This WebSocket server is **not** an `EventEmitter` (i.e. it does not use events with callbacks like [websockets/ws](https://github.com/websockets/ws)).
1212
Instead, it specifies the [asyncIterator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator) symbol and should be used in conjunction with a [`for await...of`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of) loop, just like the [Deno http server](https://deno.land/std/http/server.ts).
13-
The iterator return values are
13+
The iterator return values are of
1414
```typescript
1515
type WebSocketServerEvent = {
1616
event: WebSocketEvent;
@@ -23,13 +23,73 @@ where `socket` is the WebSocket from which the data was received on.
2323

2424
### Simple server
2525
```typescript
26-
import { serve } from 'https://deno.land/x/websocket_server/mod.ts'
26+
import { serve } from "https://deno.land/x/websocket_server/mod.ts";
2727
const server = serve(":8080");
2828
for await (const { event } of server) {
2929
console.log(event);
3030
}
3131
```
3232

33+
### Simple server with handler
34+
```typescript
35+
import { listenAndServe } from "https://deno.land/x/websocket_server/mod.ts";
36+
37+
listenAndServe(":8080", ({ socket, event }) => {
38+
console.log(socket.conn.rid, event);
39+
});
40+
```
41+
42+
### Using an existing HTTP server
43+
```typescript
44+
import { serve } from "https://deno.land/std/http/server.ts";
45+
import { WebSocketServer } from "https://deno.land/x/websocket_server/mod.ts";
46+
47+
const httpServer = serve(":8080");
48+
const wss = new WebSocketServer(httpServer);
49+
for await (const { event, socket } of wss) {
50+
console.log(event);
51+
if (!socket.isClosed) {
52+
socket.send("Hello, I am using the HTTP server!");
53+
}
54+
}
55+
```
56+
57+
### Multiple WebSocket servers sharing an existing HTTP server
58+
```typescript
59+
import { serve } from "https://deno.land/std/http/server.ts";
60+
import { WebSocketServer } from "https://deno.land/x/websocket_server/mod.ts";
61+
62+
async function serverHandler(wss: WebSocketServer, message: string) {
63+
for await (const { event, socket } of wss) {
64+
console.log(event);
65+
if (!socket.isClosed) {
66+
socket.send(message);
67+
}
68+
}
69+
}
70+
71+
const httpServer = serve(":8080");
72+
const wss1 = new WebSocketServer();
73+
const wss2 = new WebSocketServer();
74+
serverHandler(wss1, "Received your message on server 1.");
75+
serverHandler(wss2, "Received your message on server 2.");
76+
77+
for await (const req of httpServer) {
78+
if (req.url === "/foo") {
79+
wss1.handleUpgrade(req);
80+
} else if (req.url === '/bar') {
81+
wss2.handleUpgrade(req);
82+
} else {
83+
// Do stuff with your HTTP server e.g. close the connection
84+
await req.respond({
85+
body: "You are not welcome!",
86+
status: 400,
87+
});
88+
req.conn.close();
89+
}
90+
}
91+
```
92+
3393
### Echo / broadcast server
3494
Check out the example [echo/broadcast server](example_server.ts).
3595

0 commit comments

Comments
 (0)