diff --git a/client/shared/api/socket.ts b/client/shared/api/socket.ts index 246c40f0..3f66285d 100644 --- a/client/shared/api/socket.ts +++ b/client/shared/api/socket.ts @@ -5,6 +5,7 @@ import { isDevelopment } from '../utils/environment'; import { showErrorToasts, showGlobalLoading, showToasts } from '../manager/ui'; import { t } from '../i18n'; import { sharedEvent } from '../event'; +import msgpackParser from 'socket.io-msgpack-parser'; class SocketEventError extends Error { name = 'SocketEventError'; @@ -211,6 +212,7 @@ export function createSocket(token: string): Promise { token, }, forceNew: true, + parser: msgpackParser, }); _socket.once('connect', () => { // 连接成功 diff --git a/client/shared/package.json b/client/shared/package.json index 86ac6109..159455b2 100644 --- a/client/shared/package.json +++ b/client/shared/package.json @@ -24,6 +24,7 @@ "react-redux": "^8.0.2", "regenerator-runtime": "^0.13.9", "socket.io-client": "^4.1.2", + "socket.io-msgpack-parser": "^3.0.2", "url-regex": "^5.0.0", "yup": "^0.32.9" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d176f41e..6ab53789 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -303,6 +303,7 @@ importers: react-redux: ^8.0.2 regenerator-runtime: ^0.13.9 socket.io-client: ^4.1.2 + socket.io-msgpack-parser: ^3.0.2 url-regex: ^5.0.0 yup: ^0.32.9 dependencies: @@ -323,6 +324,7 @@ importers: react-redux: 8.0.2_w5j4k42lgipnm43s3brx6h3c34 regenerator-runtime: 0.13.9 socket.io-client: 4.5.1 + socket.io-msgpack-parser: 3.0.2 url-regex: 5.0.0 yup: 0.32.11 devDependencies: @@ -815,6 +817,7 @@ importers: serve-static: ^1.15.0 socket.io: ^4.2.0 socket.io-client: ^4.1.3 + socket.io-msgpack-parser: ^3.0.2 swagger-jsdoc: ^6.2.8 tailchat-server-sdk: workspace:* tailchat-service-swagger-generator: workspace:^1.0.0 @@ -857,6 +860,7 @@ importers: send: 0.18.0 serve-static: 1.15.0 socket.io: 4.5.1 + socket.io-msgpack-parser: 3.0.2 tailchat-server-sdk: link:packages/sdk ts-node: 10.9.1_t4lrjbt3sxauai4t5o275zsepa typescript: 4.7.4 @@ -24439,7 +24443,7 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1_t4lrjbt3sxauai4t5o275zsepa + ts-node: 10.9.1_nzafxra4mdyuer2ejmql6rdadq transitivePeerDependencies: - bufferutil - canvas @@ -35113,6 +35117,13 @@ packages: - utf-8-validate dev: false + /socket.io-msgpack-parser/3.0.2: + resolution: {integrity: sha512-1e76bJ1PCKi9H+JiYk+S29PBJvknHjQWM7Mtj0hjF2KxDA6b6rQxv3rTsnwBoz/haZOhlCDIMQvPATbqYeuMxg==} + dependencies: + component-emitter: 1.3.0 + notepack.io: 2.2.0 + dev: false + /socket.io-parser/4.0.5: resolution: {integrity: sha512-sNjbT9dX63nqUFIOv95tTVm6elyIU4RvB1m8dOeZt+IgWwcWklFDOdmGcfo3zSiRsnR/3pJkjY5lfoGqEe4Eig==} engines: {node: '>=10.0.0'} @@ -37235,6 +37246,7 @@ packages: typescript: 4.7.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 + dev: false /ts-node/10.9.1_typescript@4.7.4: resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} diff --git a/server/mixins/socketio.mixin.ts b/server/mixins/socketio.mixin.ts index 2825c8f5..96f8a6ee 100644 --- a/server/mixins/socketio.mixin.ts +++ b/server/mixins/socketio.mixin.ts @@ -18,6 +18,7 @@ import _ from 'lodash'; import { ServiceUnavailableError } from 'tailchat-server-sdk'; import { isValidStr } from '../lib/utils'; import bcrypt from 'bcryptjs'; +import msgpackParser from 'socket.io-msgpack-parser'; const blacklist: (string | RegExp)[] = ['gateway.*']; @@ -476,7 +477,7 @@ export const TcSocketIOService = ( initSocketIO() { if (!this.server) { throw new Errors.ServiceNotAvailableError( - '需要和 [moleculer-web] 一起使用' + '需要和 [ApiGatewayMixin] 一起使用' ); } this.io = new SocketServer(this.server, { @@ -486,6 +487,7 @@ export const TcSocketIOService = ( origin: '*', methods: ['GET', 'POST'], }, + parser: msgpackParser, }); if ( diff --git a/server/package.json b/server/package.json index 6544cc6d..0595a0cc 100644 --- a/server/package.json +++ b/server/package.json @@ -71,6 +71,7 @@ "send": "^0.18.0", "serve-static": "^1.15.0", "socket.io": "^4.2.0", + "socket.io-msgpack-parser": "^3.0.2", "tailchat-server-sdk": "workspace:*", "ts-node": "^10.0.0", "typescript": "^4.3.3" diff --git a/server/packages/sdk/src/index.ts b/server/packages/sdk/src/index.ts index 1e3c0af3..80a8ea92 100644 --- a/server/packages/sdk/src/index.ts +++ b/server/packages/sdk/src/index.ts @@ -48,7 +48,7 @@ export * from './const'; export { Utils, Errors } from 'moleculer'; /** - * 统一处理未捕获的错误 + * 统一处理未捕获的错误, 防止直接把应用打崩 * NOTICE: 未经测试 */ process.on('unhandledRejection', (reason, promise) => {