Skip to content

Commit b3f2fe8

Browse files
committed
stop时调用wsclient的关闭接口断开本地端口连接
1 parent ebb5447 commit b3f2fe8

File tree

5 files changed

+88
-88
lines changed

5 files changed

+88
-88
lines changed

README.md

+6-19
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
基本使用方法(开启调试和实时日志):
2020
```javascript
2121
const tencentCloudTools = require('../../serverless-tencent-tools')
22-
const sdk = tencentCloudTools.Debug
22+
const Sdk = tencentCloudTools.Debug
2323
const region = 'ap-aaaaa'
2424
const auth = {
2525
SecretId: '****',
@@ -28,8 +28,12 @@ const auth = {
2828
const func = {
2929
functionName: 'course'
3030
}
31-
console.log(sdk.remoteDebug(auth, func, region))
31+
const sdk = new Sdk(auth, func, region)
32+
// 开启调试和实时日志
33+
await sdk.remoteDebug()
3234

35+
// 调试后结束
36+
await sdk.stop()
3337
```
3438
输出结果:无
3539

@@ -61,23 +65,6 @@ func参数描述:
6165

6266
无输出。调试和实时日志能力都集成在接口里面实现
6367

64-
基本使用方法(结束调试模式):
65-
```javascript
66-
const tencentCloudTools = require('../../serverless-tencent-tools')
67-
const sdk = tencentCloudTools.Debug
68-
const region = 'ap-aaaaa'
69-
const auth = {
70-
SecretId: '****',
71-
SecretKey: '*****'
72-
}
73-
const func = {
74-
functionName: 'course'
75-
}
76-
console.log(sdk.stop(auth, func, region))
77-
78-
```
79-
输出结果:stop接口返回内容
80-
8168
### 实时日志功能
8269
基本使用方法(getAddr):
8370
```javascript

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,4 +35,4 @@
3535
"eslint-plugin-prettier": "^3.0.1",
3636
"prettier": "^1.18.2"
3737
}
38-
}
38+
}

sdk/debug/index.js

+36-30
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,45 @@
11
const ApiRequest = require("./lib/apiRequest")
22
const WshubClient = require("./lib/client")
33

4-
module.exports = {
5-
ApiRequest,
6-
WshubClient,
7-
remoteDebug: async function (auth, func, Region = 'ap-guangzhou') {
4+
const RemoteDebug = function (auth, func, Region = 'ap-guangzhou') {
5+
this.auth = auth
6+
this.func = func
7+
this.Region = Region
8+
this.request = new ApiRequest(auth, func, Region)
9+
}
10+
11+
RemoteDebug.prototype.remoteDebug = async function () {
12+
try {
13+
await this.request.startDebugging()
14+
const { Url, Token } = await this.request.getDebuggingInfo()
15+
if (!Url || !Token) {
16+
throw Error('Get debugging info error: the remote Url or Token does not exist.');
17+
}
18+
this.client = new WshubClient({ Url, Token })
819
try {
9-
const request = new ApiRequest(auth, func, Region)
10-
await request.startDebugging()
11-
const { Url, Token } = await request.getDebuggingInfo()
12-
if (!Url || !Token) {
13-
throw Error('Get debugging info error: the remote Url or Token does not exist.');
14-
}
15-
const client = new WshubClient({ Url, Token })
16-
try {
17-
await client.forwardDebug()
18-
console.log('Debugging listening on ws://127.0.0.1:9222.')
19-
console.log('For help see https://nodejs.org/en/docs/inspector.')
20-
console.log('Please open chorme, and visit chrome://inspect, click [Open dedicated DevTools for Node] to debug your code.')
21-
} catch (e) {
22-
console.error('Debug init error. Please confirm if the local port 9222 is used');
23-
}
24-
console.log('--------------------- The realtime log ---------------------')
25-
await client.forwardLog()
20+
await this.client.forwardDebug()
21+
console.log('Debugging listening on ws://127.0.0.1:9222.')
22+
console.log('For help see https://nodejs.org/en/docs/inspector.')
23+
console.log('Please open chorme, and visit chrome://inspect, click [Open dedicated DevTools for Node] to debug your code.')
2624
} catch (e) {
27-
console.error(e.message)
25+
console.error('Debug init error. Please confirm if the local port 9222 is used');
2826
}
27+
console.log('--------------------- The realtime log ---------------------')
28+
await this.client.forwardLog()
29+
} catch (e) {
30+
console.error(e.message)
31+
}
32+
}
2933

30-
},
31-
stop: async function (auth, func, Region = 'ap-guangzhou') {
32-
try {
33-
const request = new ApiRequest(auth, func, Region)
34-
return await request.stopDebugging()
35-
} catch (e) {
36-
console.error(e.message)
34+
RemoteDebug.prototype.stop = async function () {
35+
try {
36+
if (this.client) {
37+
this.client.close()
3738
}
39+
return await this.request.stopDebugging()
40+
} catch (e) {
41+
console.error(e.message)
3842
}
39-
};
43+
}
44+
45+
module.exports = RemoteDebug

sdk/debug/lib/client.js

+10-4
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@ const Client = function (options) {
2929

3030
/**
3131
* connect to ws-hub service
32-
* @param url ws-hub service url
33-
* @param token ws-hub token
3432
* @returns the client promise
3533
*/
3634
Client.prototype._connect = async function () {
@@ -40,7 +38,6 @@ Client.prototype._connect = async function () {
4038

4139
/**
4240
* forward for debug
43-
* @param client ws-hub client
4441
* @returns the client local port
4542
*/
4643
Client.prototype.forwardDebug = async function () {
@@ -52,7 +49,6 @@ Client.prototype.forwardDebug = async function () {
5249

5350
/**
5451
* forward for real time log
55-
* @param client ws-hub client
5652
* @returns the client local port
5753
*/
5854
Client.prototype.forwardLog = async function () {
@@ -62,4 +58,14 @@ Client.prototype.forwardLog = async function () {
6258
return this.client.forward(duplex(process.stdout, null, { end: false }), this.logRemotePort)
6359
}
6460

61+
/**
62+
* close the client
63+
* @returns close result
64+
*/
65+
Client.prototype.close = async function () {
66+
if (this.client) {
67+
return this.client.close()
68+
}
69+
}
70+
6571
module.exports = Client

sdk/debug/lib/wshub-client/index.js

+35-34
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
"use strict";
22
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3-
function adopt (value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
3+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
44
return new (P || (P = Promise))(function (resolve, reject) {
5-
function fulfilled (value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6-
function rejected (value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7-
function step (result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
5+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
88
step((generator = generator.apply(thisArg, _arguments || [])).next());
99
});
1010
};
1111
var __generator = (this && this.__generator) || function (thisArg, body) {
12-
var _ = { label: 0, sent: function () { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13-
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function () { return this; }), g;
14-
function verb (n) { return function (v) { return step([n, v]); }; }
15-
function step (op) {
12+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14+
function verb(n) { return function (v) { return step([n, v]); }; }
15+
function step(op) {
1616
if (f) throw new TypeError("Generator is already executing.");
1717
while (_) try {
1818
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
@@ -46,15 +46,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
4646
var socketIo = require("socket.io-client");
4747
var socketIoStream = require("socket.io-stream");
4848
var net_1 = require("net");
49-
var wshub_bipipe_1 = require("../wshub-bipipe");
50-
var wshub_proxy_1 = require("../wshub-proxy");
51-
var wshub_types_1 = require("../wshub-types");
52-
function normalizeListenArgs (portOrPath) {
49+
var wshub_bipipe_1 = require("@tencent/wshub-bipipe");
50+
var wshub_proxy_1 = require("@tencent/wshub-proxy");
51+
var wshub_types_1 = require("@tencent/wshub-types");
52+
function normalizeListenArgs(portOrPath) {
5353
var port = Number(portOrPath);
5454
return port >= 0 ? [port, '127.0.0.1'] : [portOrPath];
5555
}
5656
var Client = /** @class */ (function () {
57-
function Client (socket, streamSocket, logger) {
57+
function Client(socket, streamSocket, logger) {
5858
this.socket = socket;
5959
this.streamSocket = streamSocket;
6060
this.logger = logger;
@@ -101,13 +101,14 @@ var Client = /** @class */ (function () {
101101
local.unref();
102102
sendStream(local, ":" + clientPort + " -> :" + targetName);
103103
});
104+
this.socket.on('disconnect', function () { return tcpServer.close(); });
104105
tcpServer.unref();
105106
tcpServer.on('error', function (e) { return _this.logger.error("tcp server error " + e); });
106107
return [2 /*return*/, new Promise(function (resolve) {
107-
tcpServer.listen.apply(tcpServer, __spreadArrays(normalizeListenArgs(clientPort), [function () {
108-
resolve(tcpServer.address());
109-
}]));
110-
})];
108+
tcpServer.listen.apply(tcpServer, __spreadArrays(normalizeListenArgs(clientPort), [function () {
109+
resolve(tcpServer.address());
110+
}]));
111+
})];
111112
}
112113
});
113114
});
@@ -137,33 +138,33 @@ var Client = /** @class */ (function () {
137138
};
138139
return Client;
139140
}());
140-
function connect (options) {
141+
function connect(options) {
141142
var url = options.url, token = options.token, logger = options.logger, _a = options.timeout, timeout = _a === void 0 ? -1 : _a;
142143
var agent = wshub_proxy_1.default();
143144
var socket = socketIo.connect(url, { query: { token: token }, agent: agent });
144145
var streamSocket = socketIoStream(socket);
145146
streamSocket
146147
.on('forward', function (remote, clientPort, serverPort) {
147-
var streamName = ":" + clientPort + " <- :" + serverPort;
148-
var target = net_1.createConnection(clientPort).unref();
149-
target
150-
.once('connect', function () {
151-
logger.verbose(streamName + " connected");
152-
wshub_bipipe_1.default(remote, target, function () {
153-
logger.verbose(streamName + " closed");
154-
});
155-
})
156-
.on('error', function (err) {
157-
logger.error(streamName + " error '" + err + "'");
158-
remote.end();
159-
});
148+
var streamName = ":" + clientPort + " <- :" + serverPort;
149+
var target = net_1.createConnection(clientPort).unref();
150+
target
151+
.once('connect', function () {
152+
logger.verbose(streamName + " connected");
153+
wshub_bipipe_1.default(remote, target, function () {
154+
logger.verbose(streamName + " closed");
155+
});
160156
})
157+
.on('error', function (err) {
158+
logger.error(streamName + " error '" + err + "'");
159+
remote.end();
160+
});
161+
})
161162
.on('error', function () { return socket.disconnect(); });
162163
socket
163164
.on('disconnect', function (reason) {
164-
logger.info("disconnected for " + reason);
165-
socket.disconnect();
166-
});
165+
logger.info("disconnected for " + reason);
166+
socket.disconnect();
167+
});
167168
return new Promise(function (resolve, reject0) {
168169
var reject = function () {
169170
var args = [];

0 commit comments

Comments
 (0)