كنت أحاول تهيئة المصافحة ، باتباع المواصفات التي وجدتها في 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 على خادمي بسبب هذا الخطأ.
أرى أن هذا ليس خطأ محليًا عندما أرى أن تطبيق الدردشة التجريبية على الصفحة الرئيسية لـ 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"
أواجه نفس المشكلة عندما أرسل طلب المصافحة يدويًا.
قد تكون بعض الوثائق الإضافية حول كيفية إجراء مصافحة باستخدام 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" ،
لأولئك الذين ما زالوا يبحثون عن إجابة هنا:
تضمين التغريدة
فقط اضغط على هذا أيضا. تجربة خيارات مختلفة. أنا فقط أكذب لاختبار الخادم الذي قمت بإنشائه واستخدام 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 فقط في هذه الحالة).
التعليق الأكثر فائدة
لقد واجهت نفس الخطأ على 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