ক্লোজ কোড 1006 দিয়ে ওয়েবসকেট বন্ধ হওয়ার কারণটি পেয়েছি


92

আমি ওয়েবসকেটগুলি বন্ধ করার কারণটি পেতে চাই, তাই আমি ব্যবহারকারীকে সঠিক বার্তাটি প্রদর্শন করতে পারি।

আমার আছে

sok.onerror=function (evt) 
     {//since there is an error, sockets will close so...
       sok.onclose=function(e){
           console.log("WebSocket Error: " , e);}

কোডটি সর্বদা 1006 এবং কারণ সর্বদা "" থাকে। তবে আমি ভিন্ন ভিন্ন কারণগুলি বলতে চাই।

উদাহরণস্বরূপ কোমন্ড লাইন একটি ত্রুটির কারণ দেয়: "আপনি এটি মুছতে পারবেন না, কারণ ডাটাবেস আপনাকে দেয় না"। তবে ক্রোমের কনসোলে, কারণটি এখনও ""।

ভিন্ন ভিন্ন কারণগুলি বলতে কি অন্য কোনও উপায়?


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

উত্তর:


124

কোড বন্ধ করুন 1006 একটি বিশেষ কোড যার অর্থ ব্রাউজার প্রয়োগের মাধ্যমে সংযোগটি অস্বাভাবিকভাবে (স্থানীয়ভাবে) বন্ধ হয়ে গিয়েছিল।

যদি আপনার ব্রাউজার ক্লায়েন্টটি বন্ধ কোডের প্রতিবেদন করে 1006তবে আপনার websocket.onerror(evt)বিবরণটির জন্য ইভেন্টটির দিকে তাকাতে হবে ।

যাইহোক, ক্রোম 1006জাভাস্ক্রিপ্ট পক্ষের কাছে খুব কমই কোনও ঘনিষ্ঠ কোড কারণের প্রতিবেদন করবে । ওয়েবসকেট আপত্তিজনক প্রতিরোধ করতে ওয়েবস্কট অনুচ্ছেদে ক্লায়েন্ট সুরক্ষা বিধিগুলির কারণে এটি সম্ভবত। (যেমন এটি কোনও গন্তব্য সার্ভারে খোলা পোর্টগুলির জন্য স্ক্যান করতে ব্যবহার করা, বা পরিষেবা অস্বীকারের জন্য প্রচুর সংযোগ তৈরি করার জন্য)।

মনে রাখবেন যে 1006HTTP আপগ্রেড করার সময় ওয়েবকেটে কোনও ত্রুটি থাকলে ক্রোম প্রায়শই একটি ঘনিষ্ঠ কোডের প্রতিবেদন করবে (ওয়েবস্কট প্রযুক্তিগতভাবে "সংযুক্ত" হওয়ার আগে এটিই এই পদক্ষেপ)) খারাপ প্রমাণীকরণ বা অনুমোদন, বা খারাপ প্রোটোকল ব্যবহারের মতো কারণে (যেমন একটি সাবপ্রোটোকলের অনুরোধ করা, তবে সার্ভার নিজেই সেই একই সাবপ্রোটোকল সমর্থন করে না), বা এমন কোনও সার্ভারের সাথে কথা বলার চেষ্টা যা ওয়েবস্কট নয় ( যেমন সংযুক্ত করার চেষ্টা করা ws://images.google.com/)

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

ওয়েবসকেটের কাছাকাছি কোডগুলি অত্যন্ত কঠোরভাবে সংজ্ঞায়িত, এবং ঘনিষ্ঠ কারণের বাক্যাংশ / বার্তা দৈর্ঘ্যে 123 টি অক্ষর অতিক্রম করতে পারে না তা সচেতন হন (এটি একটি উদ্দেশ্যমূলক ওয়েবস্কট সীমাবদ্ধতা)।

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


4
জোয়াকিম, ধন্যবাদ, খুব বিস্তারিত anser। আমি যদি sok.onerror=function (evt) {console.log(evt);}বিশদটি ব্যবহার করি তবে এত কিছু হয় না। এমনকি একটি reasonবা কিছু না। তো, কোনও বিকল্প নেই? আমি কেবল ব্যবহারকারীকে দেখিয়েছি, something is wrong, or not connencted?এতটা ব্যবহারকারী-বান্ধব নয়, যদি ব্যবহারকারী "আপনি মুছে ফেলতে পারবেন না, ডাটাবেস বিধিনিষেধের কারণ" দেখতে পান তবে এটির পক্ষে ভাল। কোন বিকল্প? ধন্যবাদ
slevin

এর sok.oncloseপরিবর্তে আপনার ব্যবহার করা উচিত যা ট্রিগার করে close event, এতে রয়েছে reasonএবং codeএতে রয়েছে
ইহাব

@ ইহবখট্টব যেটি নিকট কোড নির্দিষ্ট হবে এবং যখন ঘনিষ্ঠতা ঘটে তখন। থাকার sok.oncloseঅনেক পাথ জন্য কাজ করবে, কিন্তু না সব পাথ। বিশেষত খারাপ প্রোটোকল, খারাপ হ্যান্ডশেক ত্রুটি (কিছু শর্ত যেমন ঘনিষ্ঠ কোডের কারণ হতে পারে 1006) ভবিষ্যতে কি এই পরিবর্তন ঘটবে? সম্ভবত। কিন্তু যখন এই উত্তরটি লেখা হয়েছিল তখন এটি সত্য ছিল।
জোয়াকিম এরদফেল্ট

@ জোয়াকিম অর্ডফেল্ট দুঃখিত, আমি reasonযখন তার কোন ফিরে আসেনি সে সম্পর্কে আমি @ স্লুইনের প্রশ্নের জবাব দিচ্ছিলাম যখন তিনি ব্যবহার onerrorকরছিলেন আমি ইঙ্গিত করছিলাম যে এই বৈশিষ্ট্যগুলি codeএবং ইভেন্টের সাথে reasonনির্দিষ্ট closeকোনও errorঘটনা নয় । তারonclose পরিবর্তে তার ব্যবহার করা ভাল হবে, আমি কি কিছু মিস করছি?
ইহাব

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

16

আমার এবং সম্ভবত @BBIOZZD ক্ষেত্রে এটি ছিল nginx proxy timeout। ডিফল্টরূপে এটি 60সকেটে কোনও ক্রিয়াকলাপ ছাড়াই sec

আমি এটিকে 24 ঘন্টা পরিবর্তন করেছি nginxএবং এটি সমস্যার সমাধান করেছে

proxy_read_timeout 86400s;
proxy_send_timeout 86400s;

এর জন্য ধন্যবাদ! এটি আমার ক্ষেত্রে 1006 ত্রুটির কারণ।
স্টিভ হ্যানভ

11

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

পিএস ফায়ারফক্স v57.00 এই কেসটি সঠিকভাবে পরিচালনা করে এবং সাফল্যের সাথে সার্ভারের কারণ বার্তাটি জেএস সাইডে সরবরাহ করে।


3

ভেবেছিলাম এটি অন্যের পক্ষে কাজে লাগবে। রেগেক্স জেনে রাখা কার্যকর, বাচ্চারা। স্কুলে থাকতে.

সম্পাদনা করুন: এটিকে একটি কার্যকর ড্যান্ডি ফাংশনে পরিণত হয়েছে!

let specificStatusCodeMappings = {
    '1000': 'Normal Closure',
    '1001': 'Going Away',
    '1002': 'Protocol Error',
    '1003': 'Unsupported Data',
    '1004': '(For future)',
    '1005': 'No Status Received',
    '1006': 'Abnormal Closure',
    '1007': 'Invalid frame payload data',
    '1008': 'Policy Violation',
    '1009': 'Message too big',
    '1010': 'Missing Extension',
    '1011': 'Internal Error',
    '1012': 'Service Restart',
    '1013': 'Try Again Later',
    '1014': 'Bad Gateway',
    '1015': 'TLS Handshake'
};

function getStatusCodeString(code) {
    if (code >= 0 && code <= 999) {
        return '(Unused)';
    } else if (code >= 1016) {
        if (code <= 1999) {
            return '(For WebSocket standard)';
        } else if (code <= 2999) {
            return '(For WebSocket extensions)';
        } else if (code <= 3999) {
            return '(For libraries and frameworks)';
        } else if (code <= 4999) {
            return '(For applications)';
        }
    }
    if (typeof(specificStatusCodeMappings[code]) !== 'undefined') {
        return specificStatusCodeMappings[code];
    }
    return '(Unknown)';
}

ব্যবহার:

getStatusCodeString(1006); //'Abnormal Closure'

{
    '0-999': '(Unused)',
    '1016-1999': '(For WebSocket standard)',
    '2000-2999': '(For WebSocket extensions)',
    '3000-3999': '(For libraries and frameworks)',
    '4000-4999': '(For applications)'
}

{
    '1000': 'Normal Closure',
    '1001': 'Going Away',
    '1002': 'Protocol Error',
    '1003': 'Unsupported Data',
    '1004': '(For future)',
    '1005': 'No Status Received',
    '1006': 'Abnormal Closure',
    '1007': 'Invalid frame payload data',
    '1008': 'Policy Violation',
    '1009': 'Message too big',
    '1010': 'Missing Extension',
    '1011': 'Internal Error',
    '1012': 'Service Restart',
    '1013': 'Try Again Later',
    '1014': 'Bad Gateway',
    '1015': 'TLS Handshake'
}

উত্স (সংক্ষিপ্ততার জন্য গৌণ সম্পাদনা সহ): https://developer.mozilla.org/en-US/docs/Web/API/ ক্লোজইভেন্ট# স্ট্যাটাস_কোড


1

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

এবং প্রতিটি এক্স সেকেন্ডের সমস্যার সমাধান হওয়া সার্ভার থেকে ক্লায়েন্টকে কিছু "পিং" বার্তা প্রেরণ


0

এটি আপনার ওয়েবসকেট ইউআরএল হতে পারে আপনি ডিভাইসে ব্যবহার করছেন একই নয় (আপনি অ্যান্ড্রয়েড / আইফোনেডেসিস থেকে বিভিন্ন ওয়েবসকেট URL টি হিট করছেন)

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