From a8ceb194f6d615c09b719872af86af33eece4b15 Mon Sep 17 00:00:00 2001 From: stary <834207172@qq.com> Date: Sun, 17 May 2026 22:07:07 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90http=E3=80=81https=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 5 +++-- src/index.ts | 24 +++++++++++++++++------- src/server.ts | 8 +++++++- src/swagger.ts | 14 +++++++------- src/websocket.ts | 7 ++++--- 5 files changed, 38 insertions(+), 20 deletions(-) diff --git a/package.json b/package.json index 31864d7..9d4e7e7 100644 --- a/package.json +++ b/package.json @@ -6,8 +6,9 @@ "build": "tsc -p tsconfig.build.json", "test": "jest --colors test/*.ts", "newman": "newman run test/renderstreaming.postman_collection.json", - "start": "node ./build/index.js -s -p 8080 -m private -k ./server.key -c ./server.cert", - "dev": "ts-node ./src/index.ts -s -p 8080 -m private", + "start": "node ./build/index.js -s -p 8443 -m private -k ./server.key -c ./server.cert", + "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", "pack": "pkg ." }, diff --git a/src/index.ts b/src/index.ts index a8df87d..824f293 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,13 +14,21 @@ export class RenderStreaming { public static run(argv: string[]): RenderStreaming { const program = new Command(); 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是数组 const args = Array.isArray(argv) ? argv : process.argv; program .usage('[options] ') - .option('-p, --port ', 'Port to start the server on.', process.env.PORT || `80`) - .option('-s, --secure', 'Enable HTTPS (you need server.key and server.cert).', process.env.SECURE || true) + .option('-p, --port ', 'Port to start the server on.', process.env.PORT || '8080') + .option('-s, --secure', 'Enable HTTPS (you need server.key and server.cert).') .option('-k, --keyfile ', 'https key file.', process.env.KEYFILE || 'server.key') .option('-c, --certfile ', 'https cert file.', process.env.CERTFILE || 'server.cert') .option('-t, --type ', 'Type of signaling protocol, Choose websocket or http.', process.env.TYPE || 'websocket') @@ -29,9 +37,11 @@ export class RenderStreaming { .parse(args); const option = program.opts(); + const legacyPort = parsePort(option.port); + const secure = option.secure === true || process.env.SECURE === 'true'; return { - port: option.port, - secure: option.secure == undefined ? false : option.secure, + port: legacyPort ?? 8080, + secure, keyfile: option.keyfile, certfile: option.certfile, type: option.type == undefined ? 'websocket' : option.type, @@ -52,6 +62,7 @@ export class RenderStreaming { constructor(options: Options) { this.options = options; this.app = createServer(this.options); + if (this.options.secure) { this.server = https.createServer({ key: fs.readFileSync(options.keyfile), @@ -81,9 +92,8 @@ export class RenderStreaming { this.options.type = 'websocket'; } if (this.options.type == 'websocket') { - log(LogLevel.info, `Use websocket for signaling server ws://${this.getIPAddress()[0]}`); - - //Start Websocket Signaling server + const protocol = this.options.secure ? 'wss' : 'ws'; + log(LogLevel.info, `Use websocket for signaling server ${protocol}://${this.getIPAddress()[0]}:${this.options.port}`); new WSSignaling(this.server, this.options.mode); } diff --git a/src/server.ts b/src/server.ts index 4094e12..861273e 100644 --- a/src/server.ts +++ b/src/server.ts @@ -22,7 +22,13 @@ export const createServer = (config: Options): express.Express => { app.use(cors({origin: '*'})); app.use(express.urlencoded({ extended: true })); 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(express.static(path.join(__dirname, '../client/public'))); app.use('/module', express.static(path.join(__dirname, '../client/src'))); diff --git a/src/swagger.ts b/src/swagger.ts index f7c0685..03dfbdb 100644 --- a/src/swagger.ts +++ b/src/swagger.ts @@ -14,10 +14,15 @@ import { log, LogLevel } from './log'; * @param config 配置选项 */ export const initSwagger = (app: Express, config: Options): void => { - // 根据配置生成服务器URL const protocol = config.secure ? 'https' : 'http'; const port = config.port || 8080; const serverUrl = `${protocol}://localhost:${port}`; + const servers = [ + { + url: serverUrl, + description: config.secure ? '本地HTTPS服务器' : '本地HTTP服务器' + } + ]; /** * Swagger配置选项 @@ -34,12 +39,7 @@ export const initSwagger = (app: Express, config: Options): void => { email: 'contact@webrtc.example.com' } }, - servers: [ - { - url: serverUrl, - description: '本地开发服务器' - } - ], + servers, components: { securitySchemes: { sessionAuth: { diff --git a/src/websocket.ts b/src/websocket.ts index 7c5f4c8..a88722c 100644 --- a/src/websocket.ts +++ b/src/websocket.ts @@ -1,10 +1,11 @@ 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 { log, LogLevel } from './log'; export default class WSSignaling { - server: Server; + server: HttpServer | HttpsServer; wss: websocket.Server; /** @@ -12,7 +13,7 @@ export default class WSSignaling { * @param server HTTP服务器实例 * @param mode 通信模式(public或private) */ - constructor(server: Server, mode: string) { + constructor(server: HttpServer | HttpsServer, mode: string) { // 保存服务器实例 this.server = server; // 创建WebSocket服务器