Skip to content
This repository was archived by the owner on Apr 16, 2025. It is now read-only.

Commit eb0bd53

Browse files
authored
Update fallbackServer.ts
1 parent 91138c4 commit eb0bd53

1 file changed

Lines changed: 23 additions & 34 deletions

File tree

src/fallbackServer.ts

Lines changed: 23 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -5,18 +5,18 @@
55

66
import * as http from "node:http";
77
import * as https from "node:https";
8-
import { WebSocket,WebSocketServer } from "ws";
8+
import * as net from "node:net";
99
import * as event from "node:events";
1010

1111

1212
export class fallbackServer extends event.EventEmitter{
13-
#wsServer: WebSocketServer;
13+
#wsServer: net.Server;
1414
#httpServer = http.createServer();
1515
#listening = false;
1616

1717
constructor(httpPort:number,wsPort:number,hostAddr:string,httpUrl:string,wsUrl:string){
1818
super();
19-
this.#wsServer = new WebSocketServer({port:wsPort,host:hostAddr});
19+
this.#wsServer = net.createServer();
2020
https.globalAgent.options.keepAlive = true;
2121

2222
this.#wsServer.on('listening',()=>{
@@ -95,60 +95,49 @@ export class fallbackServer extends event.EventEmitter{
9595
console.warn('[fallbackServer][http][err] res raise error.','\n',e);
9696
});
9797
});
98-
this.#wsServer.on('connection',(socket,req)=>{
98+
this.#wsServer.on('connection',(socket)=>{
9999
socket.on('error',(e)=>{
100100
console.warn('[fallbackServer][ws][err] socket raise error.','\n',e);
101-
try{socket.close();}catch(ee){}
101+
try{socket.destroy();}catch(ee){}
102102
});
103103
let url: URL;
104104
try{
105105
url = new URL(wsUrl);
106106
}catch(e){
107107
console.warn('[fallbackServer][ws][err] not a vaild ws url "',httpUrl,'". \n',e);
108-
socket.send('Please check you fallback url settings. ');
109-
socket.close();
108+
socket.write('Please check you fallback url settings. ');
109+
socket.destroy();
110110
return;
111111
}
112112
if (url.protocol!='ws:' && url.protocol!='wss:'){
113113
console.warn('[fallbackServer][ws][err] we only accept ws and wss target, but receive "'+url.protocol+'". ');
114-
socket.send('Please check you fallback url settings. ');
115-
socket.close();
114+
socket.write('Please check you fallback url settings. ');
115+
socket.destroy();
116116
return;
117117
}
118-
let header = req.headers;
119-
// on('ws',header,url)
120-
this.emit('ws',req.headers,req.url);
121-
header['host'] = url.host;
122-
let remote = new WebSocket(wsUrl,{headers:header});
118+
let remote = net.connect({
119+
host: url.host,
120+
port: url.port
121+
});
123122
remote.on('error',(e)=>{
124123
console.warn('[fallbackServer][ws][err] remote raise error.','\n',e);
125-
socket.send(`${e.name} ${e.message} ${e.cause}`);
126-
socket.close();
127-
});
128-
remote.on('close',(code,reason)=>{
129-
socket.close(code);
124+
socket.write(`${e.name} ${e.message} ${e.cause}`);
125+
socket.destroy();
130126
});
131-
remote.on('message',(data)=>{
132-
// on('remoteMsg',data)
133-
this.emit('remoteMsg',data);
134-
socket.send(data);
135-
});
136-
remote.on('open',()=>{
137-
socket.on('message',(data)=>{
138-
// on('localMsg',data)
139-
this.emit('localMsg',data);
140-
remote.send(data);
141-
});
142-
socket.on('close',(code,reason)=>{
143-
remote.close(code);
144-
});
127+
remote.on('connection', ()=>{
128+
remote.pipe(socket);
129+
socket.pipe(remote);
145130
});
146131
});
147132
this.#httpServer.listen(httpPort,hostAddr);
133+
this.#wsServer.listen({
134+
host: hostAddr,
135+
port: wsPort
136+
});
148137
}
149138

150139
isListening(){
151140
return this.#listening;
152141
}
153142

154-
}
143+
}

0 commit comments

Comments
 (0)