启动参数改成用backend中的getClusterInfo来判断是否是集群环境

This commit is contained in:
Xu Chang 2023-12-02 15:39:58 +08:00
parent aaea3828e8
commit 35a3219b40
3 changed files with 13 additions and 9 deletions

View File

@ -2,9 +2,9 @@
/// <reference types="node" />
import './polyfill';
import { IncomingHttpHeaders } from "http";
import { Connector, EntityDict } from 'oak-domain/lib/types';
import { Connector, EntityDict, ClusterInfo } from 'oak-domain/lib/types';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
import { AsyncRowStore } from 'oak-domain/lib/store/AsyncRowStore';
import { BackendRuntimeContext } from 'oak-frontend-base';
import { SyncContext } from 'oak-domain/lib/store/SyncRowStore';
export declare function startup<ED extends EntityDict & BaseEntityDict, Cxt extends BackendRuntimeContext<ED>, FrontCxt extends SyncContext<ED>>(path: string, contextBuilder: (scene?: string) => (store: AsyncRowStore<ED, Cxt>, header?: IncomingHttpHeaders) => Promise<Cxt>, connector: Connector<ED, FrontCxt>, omitWatchers?: boolean, omitTimers?: boolean, routine?: (context: Cxt) => Promise<void>): Promise<void>;
export declare function startup<ED extends EntityDict & BaseEntityDict, Cxt extends BackendRuntimeContext<ED>, FrontCxt extends SyncContext<ED>>(path: string, contextBuilder: (scene?: string) => (store: AsyncRowStore<ED, Cxt>, header?: IncomingHttpHeaders, clusterInfo?: ClusterInfo) => Promise<Cxt>, connector: Connector<ED, FrontCxt>, omitWatchers?: boolean, omitTimers?: boolean, routine?: (context: Cxt) => Promise<void>): Promise<void>;

View File

@ -27,7 +27,9 @@ async function startup(path, contextBuilder, connector, omitWatchers, omitTimers
allowedHeaders: ["oak-cxt"],
};
const io = new socket_io_1.Server(httpServer, socketOption);
if (process.env.pm_id || process.env.PM_ID) {
const clusterInfo = (0, oak_backend_base_1.getClusterInfo)();
if (clusterInfo.usingCluster) {
// 目前只有pm2模式
// pm2环境下要接入clusterAdapter
// https://socket.io/zh-CN/docs/v4/pm2/
io.adapter((0, cluster_adapter_1.createAdapter)());
@ -95,7 +97,7 @@ async function startup(path, contextBuilder, connector, omitWatchers, omitTimers
// 外部socket接口
router.get(connector.getSubscribePointRouter(), async (ctx) => {
const { response } = ctx;
if (process.env.PM2_STATUS) {
if (clusterInfo.usingCluster) {
// 如果使用了pm2则返回 @socket.io/pm2所监听的PM2_PORT端口
response.body = {
namespace: DATA_SUBSCRIBER_NAMESPACE,

View File

@ -5,8 +5,8 @@ import PathLib from 'path';
import Koa from 'koa';
import KoaRouter from 'koa-router';
import KoaBody from 'koa-body';
import { AppLoader } from 'oak-backend-base';
import { OakException, Connector, EntityDict } from 'oak-domain/lib/types';
import { AppLoader, getClusterInfo } from 'oak-backend-base';
import { OakException, Connector, EntityDict, ClusterInfo } from 'oak-domain/lib/types';
import { EntityDict as BaseEntityDict } from 'oak-domain/lib/base-app-domain';
import { AsyncRowStore } from 'oak-domain/lib/store/AsyncRowStore';
import { BackendRuntimeContext } from 'oak-frontend-base';
@ -18,7 +18,7 @@ import { setupWorker } from "@socket.io/sticky";
const DATA_SUBSCRIBER_NAMESPACE = '/ds';
export async function startup<ED extends EntityDict & BaseEntityDict, Cxt extends BackendRuntimeContext<ED>, FrontCxt extends SyncContext<ED>>(
path: string,
contextBuilder: (scene?: string) => (store: AsyncRowStore<ED, Cxt>, header?: IncomingHttpHeaders) => Promise<Cxt>,
contextBuilder: (scene?: string) => (store: AsyncRowStore<ED, Cxt>, header?: IncomingHttpHeaders, clusterInfo?: ClusterInfo) => Promise<Cxt>,
connector: Connector<ED, FrontCxt>,
omitWatchers?: boolean,
omitTimers?: boolean,
@ -35,7 +35,9 @@ export async function startup<ED extends EntityDict & BaseEntityDict, Cxt extend
allowedHeaders: ["oak-cxt"],
};
const io = new Server(httpServer, socketOption);
if (process.env.pm_id || process.env.PM_ID) {
const clusterInfo = getClusterInfo();
if (clusterInfo.usingCluster) {
// 目前只有pm2模式
// pm2环境下要接入clusterAdapter
// https://socket.io/zh-CN/docs/v4/pm2/
io.adapter(createAdapter());
@ -110,7 +112,7 @@ export async function startup<ED extends EntityDict & BaseEntityDict, Cxt extend
// 外部socket接口
router.get(connector.getSubscribePointRouter(), async (ctx) => {
const { response } = ctx;
if (process.env.PM2_STATUS) {
if (clusterInfo.usingCluster) {
// 如果使用了pm2则返回 @socket.io/pm2所监听的PM2_PORT端口
response.body = {
namespace: DATA_SUBSCRIBER_NAMESPACE,