Tôi đang sử dụng máy chủ nút để xử lý tất cả các dịch vụ thông báo đẩy của tôi như gcm và apn.Nodejs Socket treo & ECONNRESET - Yêu cầu đăng bài HTTP từ máy chủ Meteor tới Node js
Tôi có 2 máy chủ khác nhau. Một cái đang chạy Meteor và cái khác đang chạy Node.JS để xử lý các thông báo đẩy. (Cả hai máy chủ khác nhau)
Ứng dụng chính của tôi chạy trên máy chủ Meteor.
Tôi thực hiện yêu cầu đăng HTTP tới máy chủ node.js để gửi thông báo của tôi.
Thông thường nó hoạt động tốt, nhưng đôi khi trên máy chủ Meteor tôi nhận được lỗi này bất cứ khi nào tôi gọi là máy chủ Node.js:
socket hang up\n at Object.Future.wait (/home/myPc/.meteor/packages/meteor-tool/.1.1.10.ki0ccv++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:398:15)\n at Object.<anonymous> (packages/meteor/helpers.js:119:1)\n at Object.HTTP.call (packages/meteorhacks_kadira/lib/hijack/http.js:10:1)\n at Object.sendPushNotificationsMeteorServer (server/pushNotifications.js:249:1)\n at server/classes/pushNotifications.js:244:1\n at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1)\n at packages/meteor/timers.js:6:1\n at runWithEnvironment (packages/meteor/dynamics_nodejs.js:110:1)\n - - - - -\n at createHangUpError (http.js:1473:15)\n at Socket.socketOnEnd [as onend] (http.js:1569:23)\n at Socket.g (events.js:180:16)\n at Socket.emit (events.js:117:20)\n at _stream_readable.js:944:16\n at process._tickCallback (node.js:448:13)',
details: { [Error: socket hang up] stack: [Getter] },
data: { [Error: socket hang up] stack: [Getter] },
user: null,
userId: null,
toString: [Function] },
user: null,
userId: null,
toString: [Function] }
HOẶC
Error: read ECONNRESET at Object.Future.wait (/home/mbm/.meteor/packages/meteor-tool/.1.1.10.12ml1tp++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:398:15) at Object.call (packages/meteor/helpers.js:119:1) at Object.sendHttpCall (server/pushNotifications.js:249:1) at server/pushNotifications.js:244:1 at [object Object]._.extend.withValue (packages/meteor/dynamics_nodejs.js:56:1) at packages/meteor/timers.js:6:1 at runWithEnvironment (packages/meteor/dynamics_nodejs.js:110:1) - - - - - at errnoException (net.js:905:11) at TCP.onread (net.js:559:19)
Đây là Node tôi. Mã máy chủ JS:
realFs = require('fs');
var gracefulFs = require('graceful-fs');
gracefulFs.gracefulify(realFs);
var http = require('http');
var express = require('express');
var app = express();
var path = require("path");
configClass = require('./classes/config.js').configClass;
helperClass = require('./classes/helper.js').helperClass;
pushNotificationClass = require('./classes/pushNotification.js').pushNotificationClass;
var hostname = 'http://localhost';
var port = 6000;
var bodyParser = require('body-parser');
nodeGcm = require('node-gcm');
apn = require('apn');
apnService = new apn.Connection(helperClass.getAPNOptions());
// -- BODY PARSER -- //
app.use(bodyParser.json({limit: '50mb'}));
app.use(bodyParser.urlencoded({limit: '50mb', extended: true}));
process.on('uncaughtException', function (err) {
console.error(err);
console.log("Node NOT Exiting...");
});
// All post requests
app.post('/', function(req, res){
try {
var response = JSON.parse(req.body.pushNotificationApiParams);
var callType = req.body.callType;
switch (callType) {
case 'systemPushNotifications':
return pushNotificationClass.sendPushNotificationsV2(response);
break;
}
}
catch(e){
console.dir(e.stack);
realFs.appendFile('errorLogs/'+helperClass.getCurrentDateFormated()+'.log', helperClass.formatLog('Exception in main Post Method : '+e.stack) , function (err) {
if (err) throw err;
});
}
res.send("OK");
});
app.listen(port, function() {
console.log('Listening at '+hostname+':'+port);
});
Và đây là mã của tôi từ Bên thiên thạch, nơi tôi thực hiện yêu cầu đăng bài HTTP lên máy chủ nút js:
var headers = {
'Content-Type' : 'application/x-www-form-urlencoded'
};
var postFields = {
callType : 'systemPushNotifications',
pushNotificationApiParams : JSON.stringify(pushNotificationApiParams) // contains push notifications data
};
HTTP.call("POST", 'http://localhost:6000', { params:postFields, headers:headers });
Có ai hướng dẫn tôi đi đúng hướng không? Ngoài ra tôi thực sự sẽ đánh giá cao để biết một số thực hành tốt là tốt.
Cũng
Có thêm một vấn đề tôi đang phải đối mặt. Máy chủ node.js của tôi thoát sau 24 giờ. Tôi không biết tại sao điều đó lại xảy ra. Nó thoát mà không có bất kỳ lỗi hoặc ngoại lệ nào trong bảng điều khiển đầu cuối. Tôi phải khởi động lại nó mỗi lần.
Cả hai máy chủ trên cùng một máy? – jannis
@jannis Không, chúng là các máy chủ khác nhau – StormTrooper
Bạn nên cân nhắc vấn đề về mạng sau đó (điều gì đó ở giữa - ví dụ: cổng/proxy bị quá tải - đặt lại kết nối). Tôi đã thiết lập giám sát tcp ở cả hai bên và cố gắng tái tạo vấn đề. Sau đó, khi nó xảy ra tôi muốn kiểm tra các bản ghi để xem nếu nó thực sự là bên máy chủ nodejs đó là phá vỡ kết nối. Điều này sẽ cho bạn biết nơi để tìm thêm - mạng hoặc chính máy chủ. Tôi đặt cược vào mạng vì điều này là khá ngẫu nhiên như bạn nói. – jannis