var request_fiddler = { url: "https://www.mxc.io/api/member/order", headers: { Host: "www.mxc.io", Connection: "keep-alive", "Content-Length": "54", "x-mxc-nonce": "1581605390444", "x-mxc-sign": "3afff0f76ba2974576d3d54f6cad4ac6", Origin: "https://www.mxc.io", language: "zh-CN", "User-Agent": "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36", "Content-Type": "application/x-www-form-urlencoded", Accept: "*/*", "Sec-Fetch-Site": "same-origin", "Sec-Fetch-Mode": "cors", Referer: "https://www.mxc.io/trade/easy", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "zh-CN,zh;q=0.9", Cookie: "aliyungf_tc=AQAAALLEnBsWvAYABfWyJ96sVR6QwB17; Hm_lvt_bfc2c0a173378480991465c3626cc9b9=1581592076,1581586327; __guid=80454929.3940374504297067500.1581592047298.8274; _ga=GA1.2.1331008568.1581592060; 1d3385c1-4b59-4849-894d-fe519261429e=webim-visitor-X27GKYETXE4XVTP9VJEG; _gid=GA1.2.1232965346.1581776323; monitor_count=2; Hm_lpvt_bfc2c0a173378480991465c3626cc9b9=1581776324; u_id=WEBc358c9d9316ab0b0a0aeb3a60bfdf2d1e60a4857dc42e49644b36f51f5228e43; account=x********%40163.com" }, body: "price=2000&quantity=0.01&symbol=VI_USDT&tradeType=SELL" }; var startTime = "2020-2-15 22:50:30"; // 开始时间 var stopTime = "2020-2-15 22:50:35"; // 结束时间 var delaytime = 20; //间隔时间毫秒 request_fiddler["time"] = "true"; request_fiddler["rejectUnauthorized"] = "false"; request_fiddler["method"] = "POST"; var inputArr = []; var order_type; var instrument_id; var side; var match_price; var price; var size; var currentAccountNum; var xunhuancishu; var xunhuanjiange; var myVar; var xuhao = 0; function xiadan() { request(request_fiddler, (error, response, body) => { xuhao++; if (!error && response.statusCode == 200) { if (response.headers["content-encoding"] == "gzip") { console.log(xuhao + "有响应,但响应已压缩"); } else { console.log(xuhao + response.body); } } }); } const request = require("request"); const rp = require("request-promise"); const log4js = require("log4js"); const fs = require("fs"); const config = require("./config"); const WebSocket = require("ws"); const isPortReachable = require("is-port-reachable"); fs.writeFileSync("autoTrade.log", ""); const logger = log4js.getLogger(); log4js.configure({ appenders: { out: { type: "stdout" }, file: { type: "file", filename: "autoTrade.log" } }, categories: { default: { appenders: ["out", "file"], level: "debug" } } }); let index; try { index = parseInt(process.argv.slice(2)); if (!(index >= 0)) { throw ""; } logger.info(`${index}号服务器开始运行`); } catch (e) { logger.error("参数错误,缺少序号"); return; } let accounts = divideArray(config.accounts, config.servers.length)[index]; //logger.info('账号', accounts); let challenges = divideArray(config.challenges, config.servers.length)[index]; //logger.info('challenges', challenges); let purchaseAccount = config.purchaseAccounts[index % config.purchaseAccounts.length]; let wsClients = []; let ws; async function initWs() { if (index == 0) { const wss = new WebSocket.Server({ port: 8080 }); wss.on("connection", function connection(ws) { logger.info("websocket client已连接"); ws.on("message", function incoming(message) { logger.info("received message:", message); if (message.startsWith("secretStr:")) { wsSend(message); if (interval) { clearInterval(interval); } let secretStr = message.replace("secretStr:", ""); cancel(); purchase(secretStr); } }); wsClients.push(ws); }); process.on("exit", function() { try { wss.close(); } catch (e) {} }); } else { await new Promise((resolve, reject) => { let ii = setInterval(async () => { logger.info("等待", config.servers[0]); let reachable = await isPortReachable(8080, { host: config.servers[0] }); if (reachable) { clearInterval(ii); resolve(); } }, 500); }); ws = new WebSocket(`ws://${config.servers[0]}:8080`); ws.on("open", function open() { console.log("websocket已连接"); }); ws.on("message", function incoming(message) { logger.info("received message:", message); if (message.startsWith("secretStr:")) { let secretStr = message.replace("secretStr:", ""); logger.info("收到secretStr", secretStr); if (interval) { clearInterval(interval); } cancel(); purchase(secretStr); } }); } } function wsSend(msg) { if (index == 0) { wsClients.forEach(client => { client.send(msg); }); } else { ws.send(msg); } } let reqs = []; let count = 0; let interval; function cancel() { for (let req of reqs) { req.abort(); } } async function start() { //await initWs(); var timmer = setInterval(() => { xiadan(); clearTimeout(check.timer); // 计算还剩多少时间开始 let theDate = new Date(stopTime).getTime(); let now = new Date().getTime(); let deta = Math.floor((theDate - now) / 1000); //console.log( `距离结束还剩${deta}秒` ) if (deta <= 0) { clearInterval(timmer); return; } }, delaytime); } var df = require("./date.format"); var check = () => { // 先清除timer clearTimeout(check.timer); // 计算还剩多少时间开始 let theDate = new Date(startTime).getTime(); let now = new Date().getTime(); let deta = Math.floor((theDate - now) / 1000); console.log(`距离发送还剩${deta}秒`); if (deta <= 0) { start(); return; } check.timer = setTimeout(() => { check(); }, 200); }; check(); function divideArray(arr, size) { let newArr = Array.from({ length: size }, () => []); for (let i = 0; i < arr.length; i++) { newArr[i % size].push(arr[i]); } return newArr; }