UNPKG

1.89 kBJavaScriptView Raw
1const url = require('url');
2const zlib = require('zlib');
3const request = require('sync-request');
4const dgram = require('dgram');
5
6module.exports = {
7 sendToServer(serverAddr, dataObj) {
8 const urlObj = url.parse(serverAddr);
9 const dataJson = JSON.stringify(dataObj);
10 const dataCompressed = zlib.gzipSync(dataJson);
11 const dataStr = dataCompressed.toString('base64');
12
13 if (urlObj.protocol === 'udp:') {
14 return this._sendToUdpServer(urlObj, dataStr);
15 } else {
16 return this._sendToHttpServer(urlObj, dataStr);
17 }
18 },
19 _sendToUdpServer(urlObj, dataStr) {
20 const client = this._getUdpClient(urlObj);
21 const bufferObj = Buffer.from(dataStr);
22
23 client.send(bufferObj, 0, bufferObj.length, urlObj.port, urlObj.hostname);
24
25 return {
26 server: urlObj.href,
27 status: 0,
28 body: '',
29 };
30 },
31 _getUdpClient() {
32 if (this._udpClient) {
33 return this._udpClient;
34 }
35
36 this._udpClient = dgram.createSocket('udp4');
37
38 this._udpClient.on('close', () => {
39 this._udpClient = null;
40 this._udpClient.removeAllListeners();
41 })
42 .on('error', (err) => {
43 this._udpClient.close();
44 });
45
46 return this._udpClient;
47 },
48 _sendToHttpServer(urlObj, dataStr) {
49 const formData = new request.FormData();
50 formData.append('data_list', dataStr);
51 const response = request('POST', urlObj.href, {
52 form: formData,
53 gzip: false,
54 timeout: 10000,
55 try: true,
56 retryDelay: 200,
57 maxRetries: 3,
58 });
59 return {
60 server: urlObj.href,
61 status: response.statusCode,
62 body: response.body.toString()
63 };
64 }
65};
\No newline at end of file