Socket.io: تعيد مصافحة العميل رسالة الخطأ "النقل غير معروف"

تم إنشاؤها على ٢ يونيو ٢٠١٤  ·  34تعليقات  ·  مصدر: socketio/socket.io

كنت أحاول تهيئة المصافحة ، باتباع المواصفات التي وجدتها في LearnBoost / socket.io-spec . في وقت ما وجدت أنه يجب أن يتم ذلك من خلال طلب POST ، في وقت ما باستخدام GET . لقد جربت كلاهما وأرجع كلاهما الخطأ نفسه:

GET http://acme.local:3700/socket.io/1
or
POST http://acme.local:3700/socket.io/1

{
"الكود": 0 ،
"message": "النقل غير معروف"
}

التعليق الأكثر فائدة

لقد واجهت نفس الخطأ على socket.io v1.1.0.

أضفت سطر متابعة في البرنامج النصي من جانب الخادم ، ثم أصلحت هذه المشكلة.
io.set('transports', ["websocket", "polling"]);

الأخطاء التي واجهتها:

  • إرجاع GET /socket.io Transport unknown .
  • DEBUG=* node-dev app.js يطبع الكثير من unknown transport polling .

أشير إلى http://stackoverflow.com/questions/23962047/socket-io-v1-0-x-unknown-transport-polling

ال 34 كومينتر

هذه مشكلة بالنسبة لي أيضا. لا يمكنني تشغيل معايير لاختبار أداء Socket.io على خادمي بسبب هذا الخطأ.

أرى أن هذا ليس خطأ محليًا عندما أرى أن تطبيق الدردشة التجريبية على الصفحة الرئيسية لـ Socket.io لديه نفس المشكلة. يقوم http://chat.socket.io/socket.io/1 بإرجاع نفس الاستجابة بالضبط.

إنه بسبب إصدار socket.io . اضطررت إلى الرجوع إلى v0.9.x لأنني لم أتمكن من العثور على أي وثائق حول طريقة إجراء المصافحة مع الإصدار v1.0.x

+1

تأكد من أن libs العميل والخادم 1.0.x

أنا لا أستخدم عميل جافا سكريبت ولكني أستخدم عميل PHP مخصص. لذلك يحتاج إلى التعامل مع المصافحة. سأنتظر للحصول على بعض الوثائق حول هذا الموضوع أو قد ألقي نظرة ، إذا كان لدي وقت ، كيف يقوم عميل جافا سكريبت بالفعل بتنفيذ عملية المصافحة.

+1

أنا أقوم بالتصحيح مع عازف الكمان

chat.socket.io لا يستخدم "chat.socket.io/socket.io/1"

screenshot_1

أواجه نفس المشكلة عندما أرسل طلب المصافحة يدويًا.

قد تكون بعض الوثائق الإضافية حول كيفية إجراء مصافحة باستخدام 1.0.x مفيدة للغاية. أتلقى نفس الخطأ. لا يمكنني العثور على أي من معلمات الاستعلام على جانب الخادم التي قمت بتطبيقها باستخدام

var socket = io("http://localhost:8080", {query:{bla:"bla"});

أو

var socket = io("http://localhost:8080", {query:"bla=bla"});

نفس المشكلة هنا باستخدام مكتبة C ++.
القيام بطلب POST للخادم مثل هذا:

Send Handshake Post request...:
POST /socket.io/1/ HTTP/1.1
Accept: */*
Content-Type: text/plain
Host: localhost
Connection: Keep-Alive

تعود:

[ERRFMT] Bad Request
response: {"code":0,"message":"Transport unknown"}

ما الذي تغير؟

لا توجد وثائق في هذا التحديث!

لا أعرف ما إذا كان ذلك سيساعد:
عند الطلب:

GET /socket.io/1/?EIO=2&transport=polling HTTP/1.1
Accept: */*
Content-Type: text/plain
Host: localhost
Connection: Keep-Alive

في 0.9.4:

response: 9svmBRkeQuECcpw6ZGPK:60:60:websocket,htmlfile,xhr-polling,jsonp-polling

في 1.0.4:

response:   �0{"sid":"ySaqnVO4pJajP_TfAAAM","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":60000}

تضمين التغريدة

أختبر مع مصدر مثال دردشة.

أول. الحصول على sid

Send: Return Code: 0x00000000
GET /socket.io/?EIO=2&transport=polling&t=1402968982931-0 HTTP/1.1
Accept: */*
Referer: http://localhost:3000/
Accept-Language: ko-KR
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: localhost:3000
DNT: 1
Connection: Keep-Alive

ثانيا. اطلب نفس عنوان url مع sid ، مرة أخرى ، تتم المصافحة

Send: Return Code: 0x00000000
GET /socket.io/?EIO=2&transport=polling&t=1402968982946-1&sid=UwY0AcBHl84hz1FvAAAb HTTP/1.1
Accept: */*
Referer: http://localhost:3000/
Accept-Language: ko-KR
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: localhost:3000
DNT: 1
Connection: Keep-Alive
Cookie: io=UwY0AcBHl84hz1FvAAAb

الثالث. الاتصال بـ websocket ، لكنني لا أستطيع أن أنجح .. socket.io لا يستجيب نبضات القلب.

Send: Return Code: 0x00000000
GET /socket.io/?EIO=2&transport=websocket&sid=UwY0AcBHl84hz1FvAAAb HTTP/1.1
Origin: http://localhost:3000
Sec-WebSocket-Key: t1eDysQI92E+9v3n0mq6sA==
Connection: Upgrade
Upgrade: Websocket
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko
Host: localhost:3000
DNT: 1
Cache-Control: no-cache
Cookie: io=UwY0AcBHl84hz1FvAAAb

حاولت هنا هو الإخراج على 1.0.4:

احصل أولاً:

GET /socket.io/1/?EIO=2&transport=polling HTTP/1.1
Accept: */*
Content-Type: text/plain
Host: localhost
Connection: Keep-Alive

RESPONSE:
[ERRFMT] OK
response:   �0{"sid":"AmcxWuqqPAFapV74AAAC","upgrades":["websocket"],"pingInterval":25000,"pingTimeout":60000}

الاستعلام الثاني بالمعرف:

GET /socket.io/1/?EIO=2&transport=polling&sid=AmcxWuqqPAFapV74AAAC HTTP/1.1
Accept: */*
Content-Type: text/plain
Host: localhost
Connection: Keep-Alive

RESPONSE:
[ERRFMT] OK
response: �40

نفس الخطأ

نفس الخطأ هنا!

نفس الشيء بالنسبة لي

مرحبًا ، قد يساعدك هذا ، يمكنك تعيين الاستجابة لإرجاع نص عادي عن طريق تعيين b64 = صحيح في الطلب. (تحتاج أيضًا إلى ضبط النقل في الطلب)

فمثلا:
https: // localhost : 3030 / socket.io /؟ EIO = 2 & transport = polling & t = 1406120775060-0 & b64 = true

هذا يعيد (نوع المحتوى: نص / عادي)
97: 0 {"sid": "g75H5D6feFrj9cCDAAAB"، "ترقيات": ["websocket"]، "pingInterval": 25000، "pingTimeout": 60000}

أيضًا ، يبدو أن الحزمة التي تم إرجاعها لها التنسيق التالي:

في المثال أعلاه
طول الرسالة = 97
اكتب = 0 (مفتوح)
البيانات = {"sid": "g75H5D6feFrj9cCDAAAB" ، "ترقيات": ["websocket"] ، "pingInterval": 25000 ، "pingTimeout": 60000}

آمل أن يساعدك ذلك ، ولكن يجب أن تعلم أنني جديد على socket.io ، لذلك قد تكون هناك تعديلات أخرى تحتاجها لإجراء ما لست على دراية بها.

نفس الخطأ هنا!

+1 :(

بالمثل هنا ، أستخدم socket.io v1.0.6 على كل من العميل والخادم ..
اكتشفت أن مزامنة المتصفح ~ 0.8.2 (يستخدم socket.io 0.8.7) كانت تسبب المشكلة ، https://github.com/shakyShane/browser-sync/issues/71

لقد واجهت نفس الخطأ على socket.io v1.1.0.

أضفت سطر متابعة في البرنامج النصي من جانب الخادم ، ثم أصلحت هذه المشكلة.
io.set('transports', ["websocket", "polling"]);

الأخطاء التي واجهتها:

  • إرجاع GET /socket.io Transport unknown .
  • DEBUG=* node-dev app.js يطبع الكثير من unknown transport polling .

أشير إلى http://stackoverflow.com/questions/23962047/socket-io-v1-0-x-unknown-transport-polling

سنعمل بالتأكيد على إضافة المزيد من الوثائق حول المصافحة إلى socket.io-protocol ، حيث أشعر أن هذه المشكلة تنتمي.

إغلاق هذا لصالح https://github.com/Automattic/socket.io-protocol/issues/10.

إذا حدثت هذه المشكلة عند استخدام socket.io (ليس تطبيقًا مخصصًا) فإن ما قاله coulix هو الإصلاح المحتمل: تأكد من أن العميل والخادم من نفس الإصدار. الرجاء فتح مشكلة أخرى حول هذا الموضوع إذا لم يساعد ذلك. :)

  • نفس الخطأ

لقد حصلت بالفعل على أول 2 من إكمال عملية المصافحة ، وانبعث الاتصال عند الاتصال بالفعل وقمت باستلامه في الشاشة التسلسلية في Arduino ، لكن طلب ترقية الاتصال الثالث تلقيت طلبًا سيئًا. محبط للغاية.

عندما أحاول فتح المقبس ، فإن رسالة الخطأ الخاصة بي هي
2016-03-25 17: 47: 36.043 szx [3499: 103945] خطأ: فشلت المصافحة ... انتهت مهلة الطلب.

نظرًا لأنني أواجه هذا أيضًا ، أعتقد أنه لم يتم إصلاحه حتى الآن. im باستخدام "socket.io": "^ 1.4.5" ،

لأولئك الذين ما زالوا يبحثون عن إجابة هنا:

https://www.npmjs.com/package/passport.socketio

تضمين التغريدة

فقط اضغط على هذا أيضا. تجربة خيارات مختلفة. أنا فقط أكذب لاختبار الخادم الذي قمت بإنشائه واستخدام PAW كعميل.

لقد أصلحت هذه المشكلة عن طريق إضافة هذا الإعداد إلى خادم socket.io الخاص بي:

var socket = io({
  transports: [
    'websocket', 
    'flashsocket', 
    'htmlfile', 
    'xhr-polling', 
    'jsonp-polling', 
    'polling'
  ]
});

اقرأ المزيد هنا: http://stackoverflow.com/a/24244413/375966

afshinm يرجى ملاحظة أنه ، كما هو موثق هناك ، فإن الطلب في خيارات transports مهم:

ملاحظة: الترتيب مهم. بشكل افتراضي ، يتم إنشاء اتصال الاستقصاء الطويل أولاً ، ثم الترقية إلى WebSocket إذا كان ذلك ممكنًا. استخدام ['websocket'] يعني أنه لن يكون هناك رجوع إذا تعذر فتح اتصال WebSocket.

afshinm شكرا ، إنه يعمل

يرجى ملاحظة أنه منذ الإصدار 1.x socket.io ، فإن القيم الصالحة الوحيدة لـ transports هي:

  • مقبس الويب
  • الاقتراع

لن يتم استخدام جميع القيم الأخرى في إجابةafshinm (في الواقع ، سيتم استخدام نقل websocket فقط في هذه الحالة).

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات