完成http、https修改
This commit is contained in:
@@ -6,8 +6,9 @@
|
|||||||
"build": "tsc -p tsconfig.build.json",
|
"build": "tsc -p tsconfig.build.json",
|
||||||
"test": "jest --colors test/*.ts",
|
"test": "jest --colors test/*.ts",
|
||||||
"newman": "newman run test/renderstreaming.postman_collection.json",
|
"newman": "newman run test/renderstreaming.postman_collection.json",
|
||||||
"start": "node ./build/index.js -s -p 8080 -m private -k ./server.key -c ./server.cert",
|
"start": "node ./build/index.js -s -p 8443 -m private -k ./server.key -c ./server.cert",
|
||||||
"dev": "ts-node ./src/index.ts -s -p 8080 -m private",
|
"dev": "ts-node ./src/index.ts -p 8080 -m private",
|
||||||
|
"dev_secure": "ts-node ./src/index.ts -p 8080 -m private -s -k ./server.key -c ./server.cert",
|
||||||
"lint": "eslint src/**/*.ts test/**/*.ts",
|
"lint": "eslint src/**/*.ts test/**/*.ts",
|
||||||
"pack": "pkg ."
|
"pack": "pkg ."
|
||||||
},
|
},
|
||||||
|
|||||||
24
src/index.ts
24
src/index.ts
@@ -14,13 +14,21 @@ export class RenderStreaming {
|
|||||||
public static run(argv: string[]): RenderStreaming {
|
public static run(argv: string[]): RenderStreaming {
|
||||||
const program = new Command();
|
const program = new Command();
|
||||||
const readOptions = (): Options => {
|
const readOptions = (): Options => {
|
||||||
|
const parsePort = (value: string | number | undefined): number | undefined => {
|
||||||
|
if (value === undefined || value === null || value === '') {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
const parsed = Number(value);
|
||||||
|
return Number.isNaN(parsed) ? undefined : parsed;
|
||||||
|
};
|
||||||
|
|
||||||
// 确保argv是数组
|
// 确保argv是数组
|
||||||
const args = Array.isArray(argv) ? argv : process.argv;
|
const args = Array.isArray(argv) ? argv : process.argv;
|
||||||
|
|
||||||
program
|
program
|
||||||
.usage('[options] <apps...>')
|
.usage('[options] <apps...>')
|
||||||
.option('-p, --port <n>', 'Port to start the server on.', process.env.PORT || `80`)
|
.option('-p, --port <n>', 'Port to start the server on.', process.env.PORT || '8080')
|
||||||
.option('-s, --secure', 'Enable HTTPS (you need server.key and server.cert).', process.env.SECURE || true)
|
.option('-s, --secure', 'Enable HTTPS (you need server.key and server.cert).')
|
||||||
.option('-k, --keyfile <path>', 'https key file.', process.env.KEYFILE || 'server.key')
|
.option('-k, --keyfile <path>', 'https key file.', process.env.KEYFILE || 'server.key')
|
||||||
.option('-c, --certfile <path>', 'https cert file.', process.env.CERTFILE || 'server.cert')
|
.option('-c, --certfile <path>', 'https cert file.', process.env.CERTFILE || 'server.cert')
|
||||||
.option('-t, --type <type>', 'Type of signaling protocol, Choose websocket or http.', process.env.TYPE || 'websocket')
|
.option('-t, --type <type>', 'Type of signaling protocol, Choose websocket or http.', process.env.TYPE || 'websocket')
|
||||||
@@ -29,9 +37,11 @@ export class RenderStreaming {
|
|||||||
.parse(args);
|
.parse(args);
|
||||||
|
|
||||||
const option = program.opts();
|
const option = program.opts();
|
||||||
|
const legacyPort = parsePort(option.port);
|
||||||
|
const secure = option.secure === true || process.env.SECURE === 'true';
|
||||||
return {
|
return {
|
||||||
port: option.port,
|
port: legacyPort ?? 8080,
|
||||||
secure: option.secure == undefined ? false : option.secure,
|
secure,
|
||||||
keyfile: option.keyfile,
|
keyfile: option.keyfile,
|
||||||
certfile: option.certfile,
|
certfile: option.certfile,
|
||||||
type: option.type == undefined ? 'websocket' : option.type,
|
type: option.type == undefined ? 'websocket' : option.type,
|
||||||
@@ -52,6 +62,7 @@ export class RenderStreaming {
|
|||||||
constructor(options: Options) {
|
constructor(options: Options) {
|
||||||
this.options = options;
|
this.options = options;
|
||||||
this.app = createServer(this.options);
|
this.app = createServer(this.options);
|
||||||
|
|
||||||
if (this.options.secure) {
|
if (this.options.secure) {
|
||||||
this.server = https.createServer({
|
this.server = https.createServer({
|
||||||
key: fs.readFileSync(options.keyfile),
|
key: fs.readFileSync(options.keyfile),
|
||||||
@@ -81,9 +92,8 @@ export class RenderStreaming {
|
|||||||
this.options.type = 'websocket';
|
this.options.type = 'websocket';
|
||||||
}
|
}
|
||||||
if (this.options.type == 'websocket') {
|
if (this.options.type == 'websocket') {
|
||||||
log(LogLevel.info, `Use websocket for signaling server ws://${this.getIPAddress()[0]}`);
|
const protocol = this.options.secure ? 'wss' : 'ws';
|
||||||
|
log(LogLevel.info, `Use websocket for signaling server ${protocol}://${this.getIPAddress()[0]}:${this.options.port}`);
|
||||||
//Start Websocket Signaling server
|
|
||||||
new WSSignaling(this.server, this.options.mode);
|
new WSSignaling(this.server, this.options.mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -22,7 +22,13 @@ export const createServer = (config: Options): express.Express => {
|
|||||||
app.use(cors({origin: '*'}));
|
app.use(cors({origin: '*'}));
|
||||||
app.use(express.urlencoded({ extended: true }));
|
app.use(express.urlencoded({ extended: true }));
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
app.get('/config', (req, res) => res.json({ useWebSocket: config.type == 'websocket', startupMode: config.mode, logging: config.logging }));
|
app.get('/config', (req, res) => res.json({
|
||||||
|
useWebSocket: config.type == 'websocket',
|
||||||
|
startupMode: config.mode,
|
||||||
|
logging: config.logging,
|
||||||
|
protocol: config.secure ? 'https' : 'http',
|
||||||
|
port: config.port
|
||||||
|
}));
|
||||||
app.use('/signaling', signaling);
|
app.use('/signaling', signaling);
|
||||||
app.use(express.static(path.join(__dirname, '../client/public')));
|
app.use(express.static(path.join(__dirname, '../client/public')));
|
||||||
app.use('/module', express.static(path.join(__dirname, '../client/src')));
|
app.use('/module', express.static(path.join(__dirname, '../client/src')));
|
||||||
|
|||||||
@@ -14,10 +14,15 @@ import { log, LogLevel } from './log';
|
|||||||
* @param config 配置选项
|
* @param config 配置选项
|
||||||
*/
|
*/
|
||||||
export const initSwagger = (app: Express, config: Options): void => {
|
export const initSwagger = (app: Express, config: Options): void => {
|
||||||
// 根据配置生成服务器URL
|
|
||||||
const protocol = config.secure ? 'https' : 'http';
|
const protocol = config.secure ? 'https' : 'http';
|
||||||
const port = config.port || 8080;
|
const port = config.port || 8080;
|
||||||
const serverUrl = `${protocol}://localhost:${port}`;
|
const serverUrl = `${protocol}://localhost:${port}`;
|
||||||
|
const servers = [
|
||||||
|
{
|
||||||
|
url: serverUrl,
|
||||||
|
description: config.secure ? '本地HTTPS服务器' : '本地HTTP服务器'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Swagger配置选项
|
* Swagger配置选项
|
||||||
@@ -34,12 +39,7 @@ export const initSwagger = (app: Express, config: Options): void => {
|
|||||||
email: 'contact@webrtc.example.com'
|
email: 'contact@webrtc.example.com'
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
servers: [
|
servers,
|
||||||
{
|
|
||||||
url: serverUrl,
|
|
||||||
description: '本地开发服务器'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
components: {
|
components: {
|
||||||
securitySchemes: {
|
securitySchemes: {
|
||||||
sessionAuth: {
|
sessionAuth: {
|
||||||
|
|||||||
@@ -1,10 +1,11 @@
|
|||||||
import * as websocket from "ws";
|
import * as websocket from "ws";
|
||||||
import { Server } from 'http';
|
import { Server as HttpServer } from 'http';
|
||||||
|
import { Server as HttpsServer } from 'https';
|
||||||
import * as handler from "./class/websockethandler";
|
import * as handler from "./class/websockethandler";
|
||||||
import { log, LogLevel } from './log';
|
import { log, LogLevel } from './log';
|
||||||
|
|
||||||
export default class WSSignaling {
|
export default class WSSignaling {
|
||||||
server: Server;
|
server: HttpServer | HttpsServer;
|
||||||
wss: websocket.Server;
|
wss: websocket.Server;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -12,7 +13,7 @@ export default class WSSignaling {
|
|||||||
* @param server HTTP服务器实例
|
* @param server HTTP服务器实例
|
||||||
* @param mode 通信模式(public或private)
|
* @param mode 通信模式(public或private)
|
||||||
*/
|
*/
|
||||||
constructor(server: Server, mode: string) {
|
constructor(server: HttpServer | HttpsServer, mode: string) {
|
||||||
// 保存服务器实例
|
// 保存服务器实例
|
||||||
this.server = server;
|
this.server = server;
|
||||||
// 创建WebSocket服务器
|
// 创建WebSocket服务器
|
||||||
|
|||||||
Reference in New Issue
Block a user