mirror of
https://github.com/alibaba/anyproxy.git
synced 2025-04-21 19:04:23 +00:00
47 lines
975 B
TypeScript
47 lines
975 B
TypeScript
/**
|
|
* manage the websocket server
|
|
*
|
|
*/
|
|
import * as ws from 'ws';
|
|
import * as http from 'http';
|
|
import logUtil from './log.js';
|
|
|
|
const WsServer = ws.Server;
|
|
|
|
/**
|
|
* get a new websocket server based on the server
|
|
* @param @required {object} config
|
|
{string} config.server
|
|
{handler} config.handler
|
|
*/
|
|
function getWsServer(config: {
|
|
server: http.Server;
|
|
connHandler: (wsClient: ws, wsReq: http.IncomingMessage) => void;
|
|
}): ws.Server {
|
|
const wss = new WsServer({
|
|
server: config.server,
|
|
});
|
|
|
|
wss.on('connection', config.connHandler);
|
|
|
|
wss.on('headers', (headers) => {
|
|
headers.push('x-anyproxy-websocket:true');
|
|
});
|
|
|
|
wss.on('error', (e) => {
|
|
logUtil.error(`error in websocket proxy: ${e.message},\r\n ${e.stack}`);
|
|
console.error('error happened in proxy websocket:', e);
|
|
});
|
|
|
|
wss.on('close', (e) => {
|
|
console.error('==> closing the ws server');
|
|
});
|
|
|
|
return wss;
|
|
}
|
|
|
|
export default {
|
|
getWsServer,
|
|
};
|
|
|