নোডজেএস - "সকেট হ্যাং আপ" এর অর্থ কী?


276

আমি নোড এবং চেরিওর সাথে একটি ওয়েব স্ক্র্যাপার তৈরি করছি এবং একটি নির্দিষ্ট ওয়েবসাইটের জন্য আমি নিম্নলিখিত ত্রুটিটি পাচ্ছি (এটি কেবলমাত্র এই একটি ওয়েবসাইটে ঘটে থাকে, অন্য কেউ যাতে আমি স্ক্র্যাপ করার চেষ্টা করি না।

এটি প্রতিবার ভিন্ন স্থানে ঘটে থাকে, তাই কখনও কখনও এটি url xত্রুটি ছুঁড়ে দেয়, অন্য সময় url xভাল হয় এবং এটি সম্পূর্ণ আলাদা ইউআরএল:

    Error!: Error: socket hang up using [insert random URL, it's different every time]

Error: socket hang up
    at createHangUpError (http.js:1445:15)
    at Socket.socketOnEnd [as onend] (http.js:1541:23)
    at Socket.g (events.js:175:14)
    at Socket.EventEmitter.emit (events.js:117:20)
    at _stream_readable.js:910:16
    at process._tickCallback (node.js:415:13)

এটি ডিবাগ করা খুব জটিল, আমি জানি না কোথা থেকে শুরু করব। আরম্ভ করার জন্য, কি IS একটি সকেট ত্রুটি লটকান? এটি কি 404 ত্রুটি বা অনুরূপ? অথবা এর অর্থ কি এই যে সার্ভারটি একটি সংযোগ অস্বীকার করেছে?

আমি এর কোথাও ব্যাখ্যা খুঁজে পাচ্ছি না!

সম্পাদনা: এখানে কোডের একটি নমুনা যা (কখনও কখনও) ত্রুটিগুলি ফেরত দেয়:

function scrapeNexts(url, oncomplete) {
    request(url, function(err, resp, body) {

        if (err) {
            console.log("Uh-oh, ScrapeNexts Error!: " + err + " using " + url);
            errors.nexts.push(url);
        }
        $ = cheerio.load(body);
        // do stuff with the '$' cheerio content here
    });
}

সংযোগটি বন্ধ করার জন্য সরাসরি কোনও কল নেই, তবে আমি Node Requestযা ব্যবহার করছি (যতদূর আমি বলতে পারি) ব্যবহার করে http.getতাই এটির প্রয়োজন নেই, আমি ভুল হলে আমাকে সংশোধন করুন!

সম্পাদনা 2: এখানে কোডের একটি আসল, ব্যবহার-বিট যা ত্রুটি ঘটাচ্ছে। prodURLএবং অন্যান্য ভেরিয়েবলগুলি বেশিরভাগ jquery নির্বাচক যা আগে সংজ্ঞায়িত হয়। এটি asyncনোডের জন্য লাইব্রেরি ব্যবহার করে ।

function scrapeNexts(url, oncomplete) {
    request(url, function (err, resp, body) {

        if (err) {
            console.log("Uh-oh, ScrapeNexts Error!: " + err + " using " + url);
            errors.nexts.push(url);
        }
        async.series([
                function (callback) {
                    $ = cheerio.load(body);
                    callback();
                },
                function (callback) {
                    $(prodURL).each(function () {
                        var theHref = $(this).attr('href');
                        urls.push(baseURL + theHref);
                    });
                    var next = $(next_select).first().attr('href');
                    oncomplete(next);
                }
            ]);
    });
}

26
এর অর্থ সকেট endসময়সীমার মধ্যে সংযোগ ইভেন্ট প্রেরণ করে না । যদি আপনি চিরিওর জন্য অনুরোধটি পেয়ে থাকেন http.request(না http.get)। request.end()অনুরোধ পাঠানো শেষ করতে আপনাকে কল করতে হবে।
user568109

1
@ user568109 আমার লক্ষ্য করা উচিত, আমি নোড requestপরিষেবাটি ব্যবহার করছি , একটি নির্দিষ্ট http.requestঅনুরোধ নয় (আমার মনে হয়, আমি নোডে খুব নতুন!)। এটি একটি: github.com/mikeal/request মনে হচ্ছে এটি স্বয়ংক্রিয়ভাবে অনুরোধটি শেষ করে, না? সম্পাদনা: ডক্স অনুসারে, http method, defaults to GETসুতরাং এটি সমস্যা নয়।
জেভিজি

2
তাহলে সমস্যা হওয়া উচিত নয়। আপনি যদি চেরিও.লোড সহ স্ক্র্যাপিং অংশটি মন্তব্য করেন এবং একই সামগ্রীটি ফিরে পান তবে কি হবে। এখানে ধরা, cheerio.loadঅ্যাসিক্রোনাস। সুতরাং আপনি with দিয়ে স্টাফ করা শুরু করার আগে এটি শেষ নাও হতে পারে $
user568109

4
আমি মাঝে মাঝে এটিও পেয়েছি যে আমি যদি খুব আক্রমণাত্মকভাবে কোনও সাইট ক্রল করি (10+ একযোগে সংযোগের মতো) তারা সকেট হ্যাং-আপগুলির সাথে প্রতিক্রিয়া শুরু করবে, তাই এটিও হতে পারে।
টোবাক

1
জাস্ট এফআইআই, ইংরাজীতে, এর hang upঅর্থ সংযোগ কেটে একটি বৈদ্যুতিন কথোপকথন শেষ করা ; পুরানো ফ্যাশন টেলিফোন হ্যাং থেকে উদ্ভূত।
Ван

উত্তর:


161

socket hang upনিক্ষেপ করার সময় দুটি মামলা রয়েছে :

আপনি যখন ক্লায়েন্ট হন

যখন আপনি, ক্লায়েন্ট হিসাবে, একটি রিমোট সার্ভারে একটি অনুরোধ প্রেরণ করুন, এবং কোনও সময়মত প্রতিক্রিয়া পাবেন না। আপনার সকেট শেষ হয়েছে যা এই ত্রুটিটি ছুড়ে ফেলেছে। আপনার এই ত্রুটিটি ধরা উচিত এবং কীভাবে এটি পরিচালনা করবেন তা ঠিক করা উচিত: অনুরোধটি আবার চেষ্টা করুন কিনা, এটি পরে সারি করুন, ইত্যাদি,

আপনি যখন সার্ভার / প্রক্সি হন

আপনি যখন কোনও সার্ভার হিসাবে, সম্ভবত প্রক্সি সার্ভার হিসাবে কোনও ক্লায়েন্টের কাছ থেকে একটি অনুরোধ পাবেন, তারপরে এটি শুরু করুন (অথবা আপস্ট্রিম সার্ভারের অনুরোধটি রিলে করুন) এবং আপনি প্রতিক্রিয়াটি প্রস্তুত করার আগে ক্লায়েন্ট বাতিল / বাতিল বাতিল করার সিদ্ধান্ত নেন অনুরোধ.

এই স্ট্যাক ট্রেসটি দেখায় যে কোনও ক্লায়েন্ট যখন অনুরোধটি বাতিল করে দেয় তখন কী ঘটে।

Trace: { [Error: socket hang up] code: 'ECONNRESET' }
    at ClientRequest.proxyError (your_server_code_error_handler.js:137:15)
    at ClientRequest.emit (events.js:117:20)
    at Socket.socketCloseListener (http.js:1526:9)
    at Socket.emit (events.js:95:17)
    at TCP.close (net.js:465:12)

রেখাটি ব্লেন্ডার দ্বারা উপরে উল্লিখিত http.js:1526:9একই প্রতি socketCloseListenerনির্দেশ করে, বিশেষত:

// This socket error fired before we started to
// receive a response. The error needs to
// fire on the request.
req.emit('error', createHangUpError());

...

function createHangUpError() {
  var error = new Error('socket hang up');
  error.code = 'ECONNRESET';
  return error;
}

ব্রাউজারে ক্লায়েন্ট যদি ব্যবহারকারী হয় তবে এটি একটি সাধারণ ক্ষেত্রে। কিছু সংস্থান / পৃষ্ঠা লোড করার অনুরোধটি দীর্ঘ সময় নেয় এবং ব্যবহারকারীরা কেবল পৃষ্ঠাটি রিফ্রেশ করে। এই ধরনের ক্রিয়া আপনার পূর্ববর্তী অনুরোধটিকে বাতিল করতে দেয় যা আপনার সার্ভারের পক্ষ থেকে এই ত্রুটিটি ছুঁড়ে দেয়।

যেহেতু এই ত্রুটিটি কোনও ক্লায়েন্টের ইচ্ছার কারণে ঘটেছে, তাই তারা কোনও ত্রুটি বার্তা পাওয়ার আশা করে না। সুতরাং, এই ত্রুটিটিকে সমালোচনা হিসাবে বিবেচনা করার দরকার নেই। শুধু এটি উপেক্ষা করা. এটি সত্য দ্বারা উত্সাহিত হয়েছে যে এই জাতীয় ত্রুটিতে resআপনার ক্লায়েন্টটি যে সকেট শুনেছিল তা এখনও লেখার যোগ্য হলেও ধ্বংস হয়ে গেছে।

console.log(res.socket.destroyed); //true

সুতরাং, প্রতিক্রিয়া অবজেক্টটি স্পষ্টভাবে বন্ধ করা ব্যতীত আর কিছু পাঠানোর কোনও বিন্দু নেই:

res.end();

তবে কি তুমিই কি করা উচিত যদি তোমরা নিশ্চিত হয় একটি প্রক্সি সার্ভার যা ইতিমধ্যে মূল প্রজেক্টের করার অনুরোধ রিলে করেছেন আপস্ট্রিম আপনার অভ্যন্তরীণ অনুরোধ পরিত্যাগ করার প্রতিক্রিয়ায় আপনার আগ্রহের অভাব, যেটা ঘুরে ফিরে মূল প্রজেক্টের বলব ইঙ্গিত হয় সার্ভার, সম্ভবত, একটি ব্যয়বহুল অপারেশন বন্ধ করুন stop


2
আমি কীভাবে ক্লায়েন্ট হিসাবে অনুরোধটি আরও দীর্ঘ অপেক্ষা করতে পারি? এটি 35 সেকেন্ডে ত্রুটিযুক্ত হয়ে গেছে এবং আমার প্রায় এক মিনিট অপেক্ষা করা দরকার।
বড় অর্থ

আমি একই সমস্যা সম্মুখীন। প্রতিক্রিয়াটির জন্য অপেক্ষা করা এবং পরের অনুরোধের মাধ্যমে একজনের মৃত্যুদণ্ড কার্যকর করা যেমন শুরু করা সম্ভব socআমি কীভাবে এই সকেটটি হ্যাং আপ করতে হবে জানি ?.
দীপক

আপনি ব্যবহার করতে পারে @BigMoney setTimeout()। : এই প্রশ্ন দেখতে পাবেন stackoverflow.com/questions/6214902/...
Holla

আপনার বিবরণটি আমাকে জাহান্নাম থেকে বাঁচিয়েছে, আমি নোড.জেএসএসকে প্রবাহী সার্ভার এবং ক্লায়েন্টের মধ্যে প্রক্সি সার্ভার হিসাবে ব্যবহার করছিলাম, অনুরোধের সময়সীমা এই ত্রুটিটি কেবলমাত্র ব্যবহার করতে ভুলে গিয়েছিল কারণ res.sendধন্যবাদ
ফারজাদ ওয়াইজেড

আপনি যখন একই সংযোগে জ্যাঙ্গোর বিকাশ ওয়েব সার্ভারে দ্বিতীয় অনুরোধ করার চেষ্টা করছেন তখন আপনি ক্লায়েন্ট হিসাবে "সকেট হ্যাং আপ" পেতে পারেন। এটি সমর্থন করে না keep-alive। এবং যদি আপনার ক্লায়েন্ট এটির প্রত্যাশা করে তবে আপনি ত্রুটি পাবেন। এটি নিম্নলিখিত লাইন বরাবর দেখায় ।
এক্স-ইয়ুরি

53

উত্সটি একবার দেখুন :

function socketCloseListener() {
  var socket = this;
  var parser = socket.parser;
  var req = socket._httpMessage;
  debug('HTTP socket close');
  req.emit('close');
  if (req.res && req.res.readable) {
    // Socket closed before we emitted 'end' below.
    req.res.emit('aborted');
    var res = req.res;
    res.on('end', function() {
      res.emit('close');
    });
    res.push(null);
  } else if (!req.res && !req._hadError) {
    // This socket error fired before we started to
    // receive a response. The error needs to
    // fire on the request.
    req.emit('error', createHangUpError());
    req._hadError = true;
  }
}

সার্ভারটি কখনই প্রতিক্রিয়া না পাঠায় বার্তাটি নির্গত হয়।


2
কার্যকরী দৃষ্টিকোণ থেকে আপনি এর অর্থ কী তা ব্যাখ্যা করতে পারেন? আমি এখানে সুরক্ষার ব্যবস্থা তৈরির চেষ্টা করছি যাতে একটি অ্যারেতে আপত্তিজনক url যোগ করে পরে সেগুলি স্ক্র্যাপ করে। আমি কয়েকটি জায়গায় পড়েছি যে ত্রুটিগুলি নোডের সাথে একটি সারিবদ্ধ সমস্যা হতে পারে, প্রতিকারের এড়াতে এবং এড়ানোর সর্বোত্তম উপায়টি জানেন না।
জেভিজি

5
তবে এটি আর কতক্ষণ অপেক্ষা করে?
কমাটোস্ট

2
"কতক্ষণ" প্রয়োগ করার জন্য এটি এন.ইউইকিপিডিয়া.র.উইকি / এক্সপেনশিয়াল_ব্যাক ব্যবহার করা উচিত ।
নরম্যান এইচ

এই "সকেট হ্যাং আপ" অর্থহীন। এটি নোডেজ দল থেকে কেবল একটি আশ্চর্য।
পুচু

45

উল্লেখযোগ্য একটি বিষয়: এক্সপ্রেস ব্যবহার করে নোড.জেএস থেকে নোড.জেএস-তে সংযোগ করার সময়, আমি যদি "/" এর সাথে অনুরোধ করা ইউআরএল পাথটি উপস্থাপন না করি তবে আমি "সকেট হ্যাং আপ" পাই।


1
খাঁটি HTTP নোড.জেজেসে ক্লায়েন্ট এবং সার্ভার উভয়ই আমার সমস্যা ছিল
অ্যাশলে উইলিস

1
@ সাইলেন্টরব: আপনি দয়া করে উদাহরণ ইউআরএল দেখাতে পারেন? আমি এক্ষেত্রে একই ত্রুটির মুখোমুখি হয়েছি .. ধন্যবাদ।
প্রীতম

4
ত্রুটি: "ব্যবহারকারী / লগইন", সাফল্য: "/ ব্যবহারকারী / লগইন"
সাইলেন্টব or

4
মানুষ আমি প্রায় এক ঘন্টা এটি ডিবাগ করে কাটিয়েছি! আপনার জবাবটি দেখে এবং চিন্তা করে এসএইচ ** দেখেছেন / যুক্ত করেছেন এবং এটি ভাল কাজ করে :) ধন্যবাদ!
ড্যানিয়েল গ্রাসস্কেক

4
আপনি এই প্রতিক্রিয়া দিয়ে আমাকে ঘন্টা বাঁচাতে!
imhotep

32

আমি ব্যবহৃত require('http')গ্রাস HTTPS পরিষেবা এবং এটি দেখিয়েছে " socket hang up"।

তারপর আমি পরিবর্তিত require('http')করতেrequire('https') পরিবর্তে, এবং এটি কাজ করে যাচ্ছে।


যদিও এটি সমস্যার সমাধান হতে পারে তবে এটি প্রশ্নের উত্তর নয় । পোস্টারটি ত্রুটি বার্তার অর্থ সম্পর্কে একটি উত্তর চেয়েছিল। অতিরিক্তভাবে, ইতিমধ্যে অনেকগুলি উচ্চমানের উত্তর রয়েছে। আপনার অতিরিক্ত মূল্য প্রদান করে না।
জোহানেস ডর্ন

19
আপনার মন্তব্য করার জন্য ধন্যবাদ। আমি এই ত্রুটির জন্য আমার সময় নষ্ট করি। অবশেষে, আমি কেবল এই সমাধানটি চেষ্টা করি এবং এটি কার্যকর হয়। শুধু ভাগ করতে চান। আশা করি অন্যদের পক্ষে তাদের সময় নষ্ট না করা, উচ্চমানের উত্তর হিসাবে প্রশংসা করার জন্য নয় useful
Akkawit চ্যান্পেন

12
@ জোহনেসডর্ন ত্রুটিটির অর্থ কী তা এই প্রশ্নের একটি অন্তর্ভুক্ত উত্তর। এবং যে একটি দরকারী এক।
উলাদ কাসাচ

29

নীচে একটি সাধারণ উদাহরণ যেখানে আমি নীচের উদাহরণে মন্তব্য কোড যুক্ত করতে মিস করি যখন আমি একই ত্রুটি পেয়েছি। কোডটি কমেন্ট করা req.end()এই সমস্যাটি সমাধান করবে।

var fs = require("fs");
var https = require("https");

var options = {
    host: "en.wikipedia.org",
    path: "/wiki/George_Washington",
    port: 443,
    method: "GET"
};

var req = https.request(options, function (res) {
    console.log(res.statusCode);
});


// req.end();

2
এটি আমার বিচক্ষণতা বাঁচিয়েছে ... ধন্যবাদ!
পিগল্যা’র

তুমি নায়ক! ধন্যবাদ.
জেনহাট

17

ব্লেন্ডারের উত্তরটি প্রসারিত করে, এটি বেশ কয়েকটি পরিস্থিতিতে ঘটে। আমার মধ্যে সবচেয়ে প্রচলিত সাধারণ বিষয়গুলি হ'ল:

  1. সার্ভার ক্রাশ হয়েছে।
  2. সার্ভারটি আপনার সংযোগটি অস্বীকার করেছে, সম্ভবত এর দ্বারা ব্লক করা হয়েছে User-Agent

socketCloseListener, যেমন ব্লেন্ডারের উত্তরে বর্ণিত, হ্যাঙ্গআপ ত্রুটি তৈরি করা হয় এমন একমাত্র জায়গা নয়।

উদাহরণস্বরূপ, এখানে পাওয়া যায় :

function socketOnEnd() {
  var socket = this;
  var req = this._httpMessage;
  var parser = this.parser;

  if (!req.res) {
    // If we don't have a response then we know that the socket
    // ended prematurely and we need to emit an error on the request.
    req.emit('error', createHangUpError());
    req._hadError = true;
  }
  if (parser) {
    parser.finish();
    freeParser(parser, req);
  }
  socket.destroy();
}

আপনি চেষ্টা করতে পারেন curl নোড থেকে পাঠানো শিরোনাম এবং এর সাথে পারেন এবং সেখানে কোনও প্রতিক্রিয়া পেয়েছেন কিনা তা দেখতে পারেন। যদি আপনি এর সাথে কোনও প্রতিক্রিয়া না পেয়ে থাকেন curlতবে আপনি আপনার ব্রাউজারে কোনও প্রতিক্রিয়া পান তবে আপনার User-Agentশিরোনামটি সম্ভবত ব্লক করা হচ্ছে।


3
সার্ভারটি আপনার সংযোগটি প্রত্যাখ্যান করতে পারে এমন আরও একটি কারণ (কিউএর পরিবর্তে প্রোডে যাওয়ার সময় আমি কেবল এটিই হিট করেছি), যদি আপনার সার্ভারটি HTTP এর পরিবর্তে কোনও https অনুরোধের প্রত্যাশা করে।
এমকোলে

7

(লিনাক্স এবং ওএস এক্সের জন্য) উল্লেখ করার মতো আরেকটি ক্ষেত্রে হ'ল আপনি যদি httpsঅনুরোধগুলি সম্পাদন করার মতো লাইব্রেরি ব্যবহার করেন বা আপনি যদি https://...স্থানীয়ভাবে পরিবেশন করা উদাহরণের URL হিসাবে পাস করেন তবে আপনি পোর্টটি ব্যবহার করবেন 443যা একটি সংরক্ষিত ব্যক্তিগত বন্দর এবং আপনি শেষ হতে পারে Socket hang upবাECONNREFUSED ভুল ত্রুটি ।

পরিবর্তে, বন্দর 3000, ফে ব্যবহার করুন এবং একটি httpঅনুরোধ করুন।


6

কাউচ ডিবিতে সংযোগ করতে ন্যানো লাইব্রেরি ব্যবহার করার সময় আমারও একই সমস্যা ছিল । আমি ক্যাপালাইভেন্ট লাইব্রেরি ব্যবহার করে সুর সংযোগ পুলিংয়ের জরিমানা করার চেষ্টা করেছি এবং এটি সকেট হ্যাং আপ বার্তাটি ব্যর্থ করে দিয়েছিল ।

var KeepAliveAgent = require('agentkeepalive');

var myagent = new KeepAliveAgent({
    maxSockets: 10,
    maxKeepAliveRequests: 0,
    maxKeepAliveTime: 240000
});

nano = new Nano({
    url : uri,
    requestDefaults : {
        agent : myagent
    }
});

কিছু লড়াইয়ের পরে আমি সমস্যাটি পেরেক করতে পেরেছিলাম - এটি প্রকাশের সাথে সাথে এটি খুব, খুব সাধারণ ভুল। আমি এইচটিটিপিএস প্রোটোকলের মাধ্যমে ডাটাবেসের সাথে সংযোগ স্থাপন করছিলাম, তবে আমি আমার ন্যানো অবজেক্টটির কাছে এই লাইব্রেরি শো ব্যবহারের উদাহরণ হিসাবে তৈরি করা একটি ক্যাপালাইভ এজেন্টকে দিয়ে যাচ্ছি (তারা কিছু ডিফল্টের উপর নির্ভর করে যা এইচটিপি ব্যবহার করে)।

এইচটিপিএসএজেন্ট ব্যবহারের জন্য একটি সাধারণ পরিবর্তনটি কৌশলটি করেছে:

var KeepAliveAgent = require('agentkeepalive').HttpsAgent;

1
কিছুটা বিশদ বিশদের জন্য, যদি অনুরোধটি 443 পোর্টের জন্য কনফিগার করা থাকে এবং অনুরোধটি https মডিউলটির পরিবর্তে HTTP মডিউলের মাধ্যমে জারি করা হয়, তবে আপনি একটি সকেট হ্যাং আপ পাবেন। সংযোগ বিচ্ছিন্ন হওয়ার কারণে কেন (এসএসএল / টিএলএস আলোচনার?) আরও বিশদ থাকলে এখানে ভাল লাগবে। উদাহরণের জন্য আমি এএসপি.এনইটি-তে সেই স্তরের বিশদটি দেখেছি।
রিচার্ড কললেট

6

এটি আমার সমস্যার কারণ হয়ে দাঁড়িয়েছে, কারণ আমি এখানে তালিকাবদ্ধ সমস্ত কিছুই করছি, তবে তবুও ত্রুটিগুলি ছুঁড়ে দেওয়া হচ্ছে। দেখা যাচ্ছে যে req.abort () কল করা আসলে বাস্তবে ECONNRESET এর কোড সহ একটি ত্রুটি ছুঁড়ে দেয়, তাই আপনাকে অবশ্যই আপনার ত্রুটি হ্যান্ডলারের মধ্যে এটি ধরতে হবে।

req.on('error', function(err) {
    if (err.code === "ECONNRESET") {
        console.log("Timeout occurs");
        return;
    }
    //handle normal errors
});

5

জন্য requestমডিউল ব্যবহারকারীদের

সময় সমাপ্ত

টাইমআউট দুটি প্রধান ধরণ রয়েছে: সংযোগের সময়সীমা এবং পাঠ্য টাইমআউটগুলি । একজন কানেক্ট সময়সীমার ঘটে যদি সময়সীমার আপনার ক্লায়েন্ট একটি দূরবর্তী মেশিন (সংশ্লিষ্ট সঙ্গে একটি সংযোগ স্থাপনের প্রয়াস করছে যখন আঘাত করা হয় connect()সকেট উপর কল)। একজন পঠিত সময়সীমার যে কোনো সময় সার্ভারটি ফিরে প্রতিক্রিয়া একটি অংশ পাঠাতে ধীর ঘটে।

লক্ষ্য করুন সংযোগ সময় সমাপ্ত একটি নির্গত ETIMEDOUTত্রুটি, এবং পড়তে সময় সমাপ্ত একটি নির্গত ECONNRESETত্রুটি।


3

কিছু সার্ভারে অনুরোধ করার সময় আমার একই সমস্যা ছিল। আমার ক্ষেত্রে, অনুরোধ বিকল্পগুলিতে শিরোনামগুলিতে ব্যবহারকারী-এজেন্টের কোনও মান সেট করা আমাকে সহায়তা করেছিল।

const httpRequestOptions = {
    hostname: 'site.address.com',
    headers: {
       'User-Agent': 'Chrome/59.0.3071.115'
    }
};

এটি কোনও সাধারণ কেস নয় এবং সার্ভার সেটিংসের উপর নির্ভর করে।


2

এছাড়াও কারণ কারণ ব্যবহারের হতে পারে appদৃষ্টান্ত expressপরিবর্তে serverথেকেconst server = http.createServer(app) সার্ভারটি সকেট তৈরি করা।

ভুল

const express = require('express');
const http = require('http');
const WebSocket = require('ws');


const app = express();

app.use(function (req, res) {
  res.send({ msg: "hello" });
});

const wss = new WebSocket.Server({ server: app }); // will throw error while connecting from client socket

app.listen(8080, function listening() {
  console.log('Listening on %d', server.address().port);
});

ঠিক

const express = require('express');
const http = require('http');
const WebSocket = require('ws');


const app = express();

app.use(function (req, res) {
  res.send({ msg: "hello" });
});

const server = http.createServer(app);
const wss = new WebSocket.Server({ server });

server.listen(8080, function listening() {
  console.log('Listening on %d', server.address().port);
});

1

আমি ওয়েব (নোড) এবং অ্যান্ড্রয়েড বিকাশ উভয়ই করি এবং অ্যান্ড্রয়েড স্টুডিও ডিভাইস সিমুলেটর এবং ডকার একসাথে খোলাম, দুজনেই 8601 বন্দর ব্যবহার করে, এটি socket hang upত্রুটির অভিযোগ করেছিল , অ্যান্ড্রয়েড স্টুডিও ডিভাইস সিমুলেটর বন্ধ করার পরে এবং এটি নোডের দিক থেকে ভালভাবে কাজ করে। অ্যান্ড্রয়েড স্টুডিও ডিভাইস সিমুলেটর এবং ডকার একসাথে ব্যবহার করবেন না।


1

ওসিপি ক্লাস্টারে কাউচডিবি ব্যবহার করার সময় আমি একই ধরণের ত্রুটি পেয়েছি।

const cloudantSessionStore = sessionStore.createSessionStore(
  {
    type: 'couchdb',
    host: 'https://' + credentials['host'],
    port: credentials['port'],
    dbName: 'sessions',
    options: {
      auth: {
        username: credentials['username'],
        password: credentials['password']
      },
      cache: false
    }
  }

আমার কাউচডিবি দৃষ্টান্তের সাথে সংযোগ স্থাপনের জন্য যা "https" নয়, "https" হওয়া উচিত। আশা করি যে একই ধরণের সমস্যার মুখোমুখি তাদের পক্ষে এটি সহায়ক হতে পারে।


0

আমার ক্ষেত্রে, এটি ছিল কারণ কোনও অ্যাপ্লিকেশন / জসন প্রতিক্রিয়া খারাপভাবে ফর্ম্যাট হয়েছিল (এতে একটি স্ট্যাক ট্রেস রয়েছে)। প্রতিক্রিয়াটি কখনই সার্ভারে প্রেরণ করা হয়নি। এটি ডিবাগ করা খুব জটিল ছিল কারণ, লগ নেই। এই থ্রেডটি আমাকে বুঝতে সাহায্য করে যা ঘটেছিল।


0

আপনি নোড-http-প্রক্সি ব্যবহার করছেন এমন ক্ষেত্রে, দয়া করে এই সমস্যাটি সম্পর্কে সচেতন হন, যার ফলে সকেট হ্যাং-আপ ত্রুটি হবে: https://github.com/nodejitsu/node-http-proxy/issues/180

সমাধানের জন্য, এই লিঙ্কটিতেও, এক্সপ্রেস.বডি পার্সার () এর আগে এক্সপ্রেস রুটের মধ্যে এপিআই রুট (প্রক্সিংয়ের জন্য) ঘোষণা করে সরান।


0

ইন্টেলিজ আইডিইএ 2016.3.6 এর মাধ্যমে গতকাল আমার ওয়েব অ্যাপ্লিকেশন এবং নোড.জেএস সার্ভার চালিয়ে এই সমস্যাটি ছড়িয়েছে। আমাকে যা করতে হয়েছিল তা হ'ল আমার ক্রোম ব্রাউজারে আমার কুকি এবং ক্যাশে সাফ করা।


0

আপনি যদি https সংযোগের মাধ্যমে এই ত্রুটিটি অনুভব করছেন এবং এটি তাত্ক্ষণিকভাবে ঘটছে তবে এটি এসএসএল সংযোগ স্থাপনে সমস্যা হতে পারে।

আমার জন্য এটি এই সমস্যাটি ছিল https://github.com/nodejs/node/issues/9845 তবে আপনার জন্য এটি অন্যরকম হতে পারে। যদি এটি এসএসএল নিয়ে সমস্যা হয় তবে আপনাকে কেবল ডোমেনে সংযোগ করার চেষ্টা করে নোডেজ টিএলএস / এসএসএল প্যাকেজটি দিয়ে এটি পুনরুত্পাদন করতে সক্ষম হওয়া উচিত


0

আমি মনে করি মূল্যবান ...

আমি গুগল এপিআইয়ের জন্য পরীক্ষা তৈরি করছিলাম। আমি একটি অস্থায়ী সার্ভার দিয়ে অনুরোধটি বাধা দিচ্ছিলাম, তারপরে সেগুলিকে আসল এপিটিতে ফরোয়ার্ড করছিলাম। আমি অনুরোধে কেবল শিরোনামটি পেরিয়ে যাবার চেষ্টা করছিলাম, তবে কয়েকটি শিরোনাম অন্য প্রান্তে এক্সপ্রেসে সমস্যা তৈরি করছিল।

যেমন, আমি মুছে দিতে ছিল connection, acceptএবং content-lengthবরাবর ফরোয়ার্ড করতে অনুরোধ মডিউল ব্যবহার করার আগে হেডার।

let headers = Object.assign({}, req.headers);
delete headers['connection']
delete headers['accept']
delete headers['content-length']
res.end() // We don't need the incoming connection anymore
request({
  method: 'post',
  body: req.body,
  headers: headers,
  json: true,
  url: `http://myapi/${req.url}`
}, (err, _res, body)=>{
  if(err) return done(err);
  // Test my api response here as if Google sent it.
})

0

আমি আমার ক্ষেত্রে এটি ত্রুটি নয়, ক্রোম ব্রাউজারের জন্য প্রত্যাশিত আচরণ ছিল। ক্রোম টিআলএস সংযোগটি জীবিত রাখে (আমার মনে হয় এমন গতির জন্য), তবে নোড.জেএস সার্ভারটি 2 মিনিটের পরে এটি বন্ধ করে দেয় এবং আপনি একটি ত্রুটি পান।

আপনি প্রান্ত ব্রাউজার ব্যবহার করে জিইটি অনুরোধটি চেষ্টা করে দেখলে কোনও ত্রুটি হবে না। আপনি যদি ক্রোম উইন্ডোটি বন্ধ করেন - আপনি এখনই ত্রুটি পাবেন।

তো এখন কি করা? 1) আপনি এই ত্রুটিগুলি ফিল্টার করতে পারেন, কারণ এগুলি আসলে ত্রুটি নয়। 2) সম্ভবত আরও ভাল সমাধান আছে :)


0

এখানে আরও একটি অতিরিক্ত কেস রয়েছে বলে মনে হচ্ছে, যা হ'ল ইলেক্ট্রন "লোকালহোস্ট" ডোমেন নামের ভক্ত নয়। আমার ক্ষেত্রে আমার এটি পরিবর্তন করা দরকার:

const backendApiHostUrl = "http://localhost:3000";

এটি:

const backendApiHostUrl = "http://127.0.0.1:3000";

এর পরে সমস্যাটি সবে গেল।

এর অর্থ হ'ল ডিএনএস রেজোলিউশন (স্থানীয় বা রিমোট) কিছু সমস্যা তৈরি করতে পারে।


0

নোড জেএস কোড, মংডোব সংযোগের স্ট্রিং, সিআরএস ইত্যাদি পরীক্ষা করা আমার জন্য দীর্ঘ ডিবাগের পরে, আমার জন্য কেবল একটি ভিন্ন পোর্ট সংখ্যায় স্যুইচ করা server.listen(port);এটিকে কাজ করে তোলে postman, এটিও চেষ্টা করে। proxyশুধুমাত্র ডিফল্ট সেটিংসে কোনও পরিবর্তন নেই ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.