Node.js不推送所有通知

我刚开始学习Node.js,因为我发现它是创build推送通知服务器的正确工具。

所以我在这里得到了这个狡猾的脚本,我使用一些互联网教程一起入侵:

// ------------------------------------------------------------ // HTTP Server stack using Node.js // ------------------------------------------------------------ // import the HTTP module that ships with Node.js var http = require("http"); var url = require("url"); // push notification helper modules var crypto = require("crypto"); var tls = require("tls"); var fs = require("fs"); var stream = null; process.chdir(__dirname); //connect(function(){}); function connect(next) { filepath = 'cert_and_key_dev.pem'; var certPem = fs.readFileSync(filepath, encoding='ascii'); var keyPem = fs.readFileSync(filepath, encoding='ascii'); var options = { key: keyPem, cert: certPem }; var apnshost_dev = 'gateway.sandbox.push.apple.com'; var apnsport = 2195; stream = tls.connect(apnsport, apnshost_dev, options, function() { // connected console.log('I am connected to APNS, WOO HOO!'); //next(!stream.authorized, stream); pushTest(); }); } function pushTest() { var pushnd = { aps: { alert: 'This is a test' }, customParam: { foo: 'bar' } } // aps is required var hextoken = '...my push token here....'; // construct the protocol data unit var payload = JSON.stringify(pushnd); var payloadlen = Buffer.byteLength(payload, 'utf-8'); // encoded UTF-8 string length, max 255 bytes var tokenlen = 32; var buffer = new Buffer(1 + 4 + 4 + 2 + tokenlen + 2 + payloadlen); var i = 0; buffer[i++] = 1; // command var msgid = 0xbeefcace; // message identifier, can be left 0 buffer[i++] = msgid >> 24 & 0xFF; buffer[i++] = msgid >> 16 & 0xFF; buffer[i++] = msgid >> 8 & 0xFF; buffer[i++] = msgid & 0xFF; // expiry in epoch seconds (1 hour) var seconds = Math.round(new Date().getTime() / 1000) + 1*60*60; // expire in epoch seconds (1 hour) buffer[i++] = seconds >> 24 & 0xFF; buffer[i++] = seconds >> 16 & 0xFF; buffer[i++] = seconds >> 8 & 0xFF; buffer[i++] = seconds & 0xFF; buffer[i++] = tokenlen >> 8 & 0xFF; // token length buffer[i++] = tokenlen & 0xFF; token = hextobin(hextoken); token.copy(buffer, i, 0, tokenlen); i += tokenlen; buffer[i++] = payloadlen >> 8 & 0xFF; // payload length buffer[i++] = payloadlen & 0xFF; payload = Buffer(payload); payload.copy(buffer, i, 0, payloadlen); var j = 0; // try sending multiple copies of the notification in one stream for(var j = 0; j < 5; j++) { var writable = stream.write(buffer); // write push notification to socket stream (send it out) } console.log('Test notification sent!'); // Handling error messages stream.on('data', function(data) { var command = data[0] & Ox0FF // always 8 var status = data[1] & 0x0FF // error code var msgid = (data[2] << 24) + (data[3] << 16) + (data[4] << 8) + (data[5]); console.log(command + ':' + status + ':' + msgid); }); } function hextobin(hexstr) { buf = new Buffer(hexstr.length / 2); for(var i = 0; i < hexstr.length/2; i++) { buf[i] = (parseInt(hexstr[i * 2], 16) << 4) + (parseInt(hexstr[i * 2 + 1], 16)); } return buf; } function start(route, handle) { function onRequest(request, response) { // using url module to handle routing and mapping // of each request var pathname = url.parse(request.url).pathname; console.log("Request for " + pathname + " received."); route(handle, pathname, response, request); /* request.setEncoding("utf8"); // POST data callback function for each chunk of data request.addListener("data", function(postDataChunk) { postData += postDataChunk; console.log("Received POST data chunk '" + postDataChunk + "' ."); }); // POST data callback function for completion of data download request.addListener("end", function() { route(handle, pathname, response, postData); }); // depedency injective response object to allow // request handler to use it route(handle, pathname, response); */ } http.createServer(onRequest).listen(8888); console.log("Server has started."); } exports.start = start; exports.connect = connect; 

在for循环中:

 // try sending multiple copies of the notification in one stream for(var j = 0; j < 5; j++) { var writable = stream.write(buffer); // write push notification to socket stream (send it out) } 

我最多只能收到5个通知中的2个。

我做错了吗?

苹果检查其侧推消息的重复,以防止垃圾邮件。
尝试更改邮件内容。