@rvncom/socket-bun-engine 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +5 -2
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/server.d.ts +11 -3
- package/dist/server.js +31 -5
- package/dist/transports/websocket.js +12 -6
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# @rvncom/socket-bun-engine
|
|
2
2
|
|
|
3
|
+
[](https://www.npmjs.com/package/@rvncom/socket-bun-engine)
|
|
4
|
+
[](https://www.npmjs.com/package/@rvncom/socket-bun-engine)
|
|
5
|
+
|
|
3
6
|
Engine.IO server implementation for the Bun runtime. Provides native WebSocket and HTTP long-polling transports for [Socket.IO](https://socket.io/).
|
|
4
7
|
|
|
5
8
|
Fork of `@socket.io/bun-engine` with bug fixes, improved API, and active maintenance.
|
|
@@ -7,13 +10,13 @@ Fork of `@socket.io/bun-engine` with bug fixes, improved API, and active mainten
|
|
|
7
10
|
## Installation
|
|
8
11
|
|
|
9
12
|
```bash
|
|
10
|
-
bun add @
|
|
13
|
+
bun add @rvncom/socket-bun-engine
|
|
11
14
|
```
|
|
12
15
|
|
|
13
16
|
## Usage
|
|
14
17
|
|
|
15
18
|
```ts
|
|
16
|
-
import { Server as Engine } from "@
|
|
19
|
+
import { Server as Engine } from "@rvncom/socket-bun-engine";
|
|
17
20
|
import { Server } from "socket.io";
|
|
18
21
|
|
|
19
22
|
const engine = new Engine({
|
package/dist/index.d.ts
CHANGED
package/dist/index.js
CHANGED
package/dist/server.d.ts
CHANGED
|
@@ -73,7 +73,7 @@ export declare class Server extends EventEmitter<Record<never, never>, Record<ne
|
|
|
73
73
|
* @param req
|
|
74
74
|
* @param server
|
|
75
75
|
*/
|
|
76
|
-
handleRequest(req: Request, server: Bun.Server<WebSocketData
|
|
76
|
+
handleRequest(req: Request, server: Bun.Server<WebSocketData>, _url?: URL): Promise<Response>;
|
|
77
77
|
onWebSocketOpen(ws: BunWebSocket): void;
|
|
78
78
|
onWebSocketMessage(ws: BunWebSocket, message: RawData): void;
|
|
79
79
|
onWebSocketClose(ws: BunWebSocket, code: number, message: string): void;
|
|
@@ -96,9 +96,17 @@ export declare class Server extends EventEmitter<Record<never, never>, Record<ne
|
|
|
96
96
|
*/
|
|
97
97
|
private handshake;
|
|
98
98
|
/**
|
|
99
|
-
*
|
|
99
|
+
* Returns an iterator over all connected sockets.
|
|
100
100
|
*/
|
|
101
|
-
|
|
101
|
+
get sockets(): IterableIterator<Socket>;
|
|
102
|
+
/**
|
|
103
|
+
* Returns the socket with the given id, if any.
|
|
104
|
+
*/
|
|
105
|
+
getSocket(id: string): Socket | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* Closes all clients and returns a Promise that resolves when all are closed.
|
|
108
|
+
*/
|
|
109
|
+
close(): Promise<void>;
|
|
102
110
|
/**
|
|
103
111
|
* Creates a request handler.
|
|
104
112
|
*
|
package/dist/server.js
CHANGED
|
@@ -48,8 +48,8 @@ export class Server extends EventEmitter {
|
|
|
48
48
|
* @param req
|
|
49
49
|
* @param server
|
|
50
50
|
*/
|
|
51
|
-
async handleRequest(req, server) {
|
|
52
|
-
const url = new URL(req.url);
|
|
51
|
+
async handleRequest(req, server, _url) {
|
|
52
|
+
const url = _url ?? new URL(req.url);
|
|
53
53
|
debug(`handling ${req.method} ${req.url}`);
|
|
54
54
|
const responseHeaders = new Headers();
|
|
55
55
|
if (this.opts.cors) {
|
|
@@ -279,11 +279,37 @@ export class Server extends EventEmitter {
|
|
|
279
279
|
return promise;
|
|
280
280
|
}
|
|
281
281
|
/**
|
|
282
|
-
*
|
|
282
|
+
* Returns an iterator over all connected sockets.
|
|
283
|
+
*/
|
|
284
|
+
get sockets() {
|
|
285
|
+
return this.clients.values();
|
|
286
|
+
}
|
|
287
|
+
/**
|
|
288
|
+
* Returns the socket with the given id, if any.
|
|
289
|
+
*/
|
|
290
|
+
getSocket(id) {
|
|
291
|
+
return this.clients.get(id);
|
|
292
|
+
}
|
|
293
|
+
/**
|
|
294
|
+
* Closes all clients and returns a Promise that resolves when all are closed.
|
|
283
295
|
*/
|
|
284
296
|
close() {
|
|
285
297
|
debug("closing all open clients");
|
|
286
|
-
this.clients.
|
|
298
|
+
if (this.clients.size === 0) {
|
|
299
|
+
return Promise.resolve();
|
|
300
|
+
}
|
|
301
|
+
return new Promise((resolve) => {
|
|
302
|
+
let remaining = this.clients.size;
|
|
303
|
+
const onClose = () => {
|
|
304
|
+
if (--remaining === 0) {
|
|
305
|
+
resolve();
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
this.clients.forEach((client) => {
|
|
309
|
+
client.once("close", onClose);
|
|
310
|
+
client.close();
|
|
311
|
+
});
|
|
312
|
+
});
|
|
287
313
|
}
|
|
288
314
|
/**
|
|
289
315
|
* Creates a request handler.
|
|
@@ -323,7 +349,7 @@ export class Server extends EventEmitter {
|
|
|
323
349
|
fetch: (req, server) => {
|
|
324
350
|
const url = new URL(req.url);
|
|
325
351
|
if (url.pathname === this.opts.path) {
|
|
326
|
-
return this.handleRequest(req, server);
|
|
352
|
+
return this.handleRequest(req, server, url);
|
|
327
353
|
}
|
|
328
354
|
else {
|
|
329
355
|
return new Response(null, { status: 404 });
|
|
@@ -11,13 +11,19 @@ export class WS extends Transport {
|
|
|
11
11
|
return [];
|
|
12
12
|
}
|
|
13
13
|
send(packets) {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
if (!this.writable || !this.socket || this.socket.readyState !== WebSocket.OPEN) {
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (packets.length === 1) {
|
|
18
|
+
this.socket.send(Parser.encodePacket(packets[0], true));
|
|
19
|
+
return;
|
|
20
20
|
}
|
|
21
|
+
// Batch multiple packets into a single syscall via cork()
|
|
22
|
+
this.socket.cork(() => {
|
|
23
|
+
for (const packet of packets) {
|
|
24
|
+
this.socket.send(Parser.encodePacket(packet, true));
|
|
25
|
+
}
|
|
26
|
+
});
|
|
21
27
|
}
|
|
22
28
|
doClose() {
|
|
23
29
|
this.socket?.close();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rvncom/socket-bun-engine",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1",
|
|
4
4
|
"description": "Engine.IO server implementation for Bun runtime",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -32,5 +32,10 @@
|
|
|
32
32
|
"peerDependencies": {
|
|
33
33
|
"typescript": "^5"
|
|
34
34
|
},
|
|
35
|
-
"license": "MIT"
|
|
35
|
+
"license": "MIT",
|
|
36
|
+
"homepage": "https://github.com/rvncom/socket-bun-engine#readme",
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "git+https://github.com/rvncom/socket-bun-engine.git"
|
|
40
|
+
}
|
|
36
41
|
}
|