العودة إلى الإصدار 2.1.1 يعمل على إصلاح المشكلة.
أظن أن له علاقة بالتغييرات الجديدة في إدارة الكورسات.
لا يبدو أن تحديد الأصول يدويًا يؤدي إلى أي شيء.
يبدأ العمل بطريقة سحرية عند تشغيل مصحح أخطاء التفاعل الأصلي.
reconnection: true,
reconnectionDelay: 500,
jsonp: false,
reconnectionAttempts: Infinity,
transports: ['websocket']
واجهت نفس المشكلة على كلا النظامين الأساسيين (المحاكاة) 2.1.1 ، فهي تعمل فقط مع تشغيل مصحح الأخطاء.
أنا أيضا أواجه هذه المشكلة. لقد قمت بالترقية لمعرفة ما إذا كانت ستصلح أول مشكلة تتعلق بزمن الاتصال أم لا.
أنا أيضا أواجه نفس الشيء. مشكلة
العودة إلى 2.1.1 يعمل بالنسبة لي.
ما زلت أواجه نفس المشكلة التي تعود 2.1.1 أيضًا لا تعمل من أجلي.
يجب إصلاحه من خلال https://github.com/socketio/engine.io-client/pull/607.
benhjames هل يمكنك التأكد من أن الإصلاح الخاص بك قد أصلح المشكلة في React Native؟
نعم ، أنا حاليًا أقوم بتشغيل [email protected]
(الذي سحب [email protected]
) على React Native بدون مشكلة.
يجدر التحقق للتأكد من أن engine.io-client
الخاص بك هو 3.3.2 ، حيث يحتوي هذا على الإصلاح الأصلي لمقابس الويب. 😃
benhjamesdarrachequesne لدي مأخذ المستخدمة. [email protected] (التي تم سحبها في [email protected]) وتحقق أيضًا من التغييرات في node_modules لا تزال ، إنها لا تعمل بالنسبة لي.
"استيراد io من" socket.io-client "؛
يقوم برنامج HomeScreen الخاص بتصدير الفئة الافتراضية بتوسيع React.Component {
المُنشئ (الدعائم) {
سوبر (الدعائم) ؛
this.socket = io ('ws: //192.168.0.107: 8080 / endpoint'، {
إعادة الاتصال: صحيح ،
إعادة الاتصال التأخير: 500 ،
jsonp: خطأ ،
إعادة الاتصال المحاولات: إنفينيتي ،
النقل: ["websocket"]
}) ؛
this.socket.on ('connect_error'، (يخطئ) => {
console.log (يخطئ)
}) ؛
}
"
أتلقى الخطأ على النحو التالي:
Error: websocket error
at WS.Transport.onError (transport.js:67)
at WebSocket.ws.onerror (websocket.js:157)
at WebSocket.dispatchEvent (event-target.js:172)
at WebSocket.js:289
at RCTDeviceEventEmitter.emit (EventEmitter.js:190)
at MessageQueue.__callFunction (MessageQueue.js:349)
at MessageQueue.js:106
at MessageQueue.__guard (MessageQueue.js:297)
at MessageQueue.callFunctionReturnFlushedQueue (MessageQueue.js:105)
at debuggerWorker.js:72
يبدو لي أن نقطة النهاية غير صحيحة - يجب أن تكون رابط بروتوكول http
أو https
، وليس ws
واحد. 👍
benhjames حاولت سابقًا استخدام WebSocket API https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API وكان يعمل بشكل جيد تمامًا مع نفس البروتوكول.
socket.io (على عكس WebSocket API) يقبل فقط بروتوكول HTTP (S) URI للعميل ( انظر المستندات هنا ) ، ولكنه لا يستخدم بروتوكول WS خلف الكواليس.
لذلك إذا قمت بعمل io('http://192.168.0.107:8080/endpoint', ...)
، فيجب أن تعمل!
benhjames شكرا على التحديث!
أعتقد أن ws://
يجب أن يعمل بشكل صحيح ، لكن /endpoint
يعني أنك تريد الاتصال بمساحة اسم نقطة النهاية (هذا هو التطبيق الحالي ، بدءًا من الإصدار 2.x). قد ترغب في استخدام:
this.socket = io('ws://192.168.0.107:8080', {
path: '/endpoint',
reconnection: true,
reconnectionDelay: 500,
jsonp: false,
reconnectionAttempts: Infinity,
transports: ['websocket']
});
darrachequesne لقد حاولت أعلاه التنفيذ لكنه لا يزال لا يعمل.
ربما يكون من المفيد رؤية شكل رمز خادم SocketIO ، فقط للتأكد من أنه يستخدم مساحة الاسم والإعدادات الصحيحة وما إلى ذلك 🙂
إنه يعمل بشكل جيد مع WebSocket API ولكن عندما أحاول الاتصال بـ Socket.io API ، أتلقى خطأ على النحو التالي:
websocket error
Stack trace:
null:null in WS.Transport.onError
node_modules/engine.io-client/lib/transports/websocket.js:178:8 in WebSocket.ws.onerror
node_modules/event-target-shim/lib/event-target.js:172:38 in WebSocket.dispatchEvent
node_modules/react-native/Libraries/WebSocket/WebSocket.js:289:13 in <unknown>
node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js:190:32 in RCTDeviceEventEmitter.emit
node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:349:41 in MessageQueue.__callFunction
node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:106:11 in <unknown>
node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:297:8 in MessageQueue.__guard
node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:105:9 in MessageQueue.callFunctionReturnFlushedQueue
http://192.168.0.103:19001/debugger-ui/debuggerWorker.js:72:58 in <unknown>
إذا كان يعمل مع WebSocket API بدون منطق مخصص لإلغاء تسلسل حمولات socket.io ، فهذا يعني أن الخادم لا يستخدم socket.io.
هل هناك أي فرصة لتقديم بعض التعليمات البرمجية من الخادم للتحقق مما إذا كانت هذه هي الحالة؟
benhjames هذا صحيح نحن نستخدم https://docs.oracle.com/javaee/7/api/javax/websocket/package-summary.html للرمز الخلفي.
هذا ما يفسر ذلك إذن! يحتاج Socket.io إلى أن يتم استخدامه على كل من العميل والخادم للعمل. 👍
benhjamesdarrachequesne الآن أنا باستخدام socket.io في الخلفية، وانها تعمل بشكل جيد على الواجهة مع الفانيليا جافا سكريبت باستخدام socket.io ولكن عندما أحاول ربط socket.io من خلال ردة الفعل الأصلية أنا على الحصول على الخطأ:
Vanilla JS (يعمل بشكل جيد تمامًا):
""
<script>
var socket = io.connect('http://localhost:9092');
socket.on('connect', function() {
output('<span class="connect-msg">Client has connected to the server!</span>');
});
**React Native code: (Not working)**
this.socket = io.connect('http://localhost:9092',{
reconnection: true,
reconnectionDelay: 500,
jsonp: false,
reconnectionAttempts: Infinity,
transports: ['websocket']});
this.socket.on('connect',function(e){
console.log("on Connect");
})
this.socket.on('connect_error', (err) => {
console.log(err)
});
**Error:**
17:15
websocket error
Stack trace:
node_modules/engine.io-client/lib/transport.js:67:22 in onError
node_modules/engine.io-client/lib/transports/websocket.js:157:17 in onerror
node_modules/event-target-shim/lib/event-target.js:172:43 in dispatchEvent
node_modules/react-native/Libraries/WebSocket/WebSocket.js:290:10 in
node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js:191:12 in emit
node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:349:47 in __callFunction
node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:106:26 in
node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:297:10 in __guard
node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:105:17 in callFunctionReturnFlushedQueue
```
I am using https://github.com/mrniko/netty-socketio in backend.
قد تكون هناك حاجة للاتصال بعنوان URL مضيف غير محلي (أي عنوان IP لجهاز الكمبيوتر الخاص بك) داخل React Native: بالتأكيد في Android وربما في iOS اعتمادًا على المحاكي الذي يتم استخدامه.
إذا لم يفلح ذلك ، فمن المفيد تجربة الخيار transports: ['polling']
لمعرفة ما إذا كان نقل WebSocket على وجه الخصوص لا يعمل ، أو ما إذا كانت مشكلة اتصال شبكة عامة.
benhjames أواجه مشكلة غريبة. أنا أستخدم https://github.com/mrniko/netty-socketio في الواجهة الخلفية وإذا كنت أستخدم Vanilla JS كما هو مذكور أعلاه ، فإنها تعمل بشكل جيد تمامًا ولكن إذا كنت أستخدم مع تفاعل أصلي ، فإن الخادم يظهر اتصالاً ناجحًا ولكن في رد فعل أصلي ، أتلقى خطأ اتصال على النحو التالي:
server error
Stack trace:
node_modules/engine.io-client/lib/socket.js:453:28 in onPacket
node_modules/engine.io-client/lib/socket.js:276:18 in <unknown>
node_modules/component-emitter/index.js:133:25 in emit
node_modules/engine.io-client/lib/transport.js:148:12 in onPacket
node_modules/engine.io-client/lib/transports/polling.js:144:18 in callback
node_modules/engine.io-parser/lib/browser.js:384:20 in decodePayload
node_modules/engine.io-client/lib/transports/polling.js:148:23 in onData
node_modules/engine.io-client/lib/transports/polling-xhr.js:127:16 in <unknown>
node_modules/component-emitter/index.js:133:25 in emit
node_modules/engine.io-client/lib/transports/polling-xhr.js:300:12 in onData
node_modules/engine.io-client/lib/transports/polling-xhr.js:367:16 in onLoad
node_modules/engine.io-client/lib/transports/polling-xhr.js:253:10 in onreadystatechange
node_modules/event-target-shim/lib/event-target.js:172:43 in dispatchEvent
node_modules/react-native/Libraries/Network/XMLHttpRequest.js:570:23 in setReadyState
node_modules/react-native/Libraries/Network/XMLHttpRequest.js:392:25 in __didCompleteResponse
node_modules/react-native/Libraries/vendor/emitter/EventEmitter.js:191:12 in emit
node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:349:47 in __callFunction
node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:106:26 in <unknown>
node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:297:10 in __guard
node_modules/react-native/Libraries/BatchedBridge/MessageQueue.js:105:17 in callFunctionReturnFlushedQueue
...
ملاحظة:
مع NodeJS ، تعمل بشكل جيد تمامًا دون أي خطأ.
يرجى الاطلاع على الجواب أعلاه!
شكرًا ، benhjames على دعمكم ، إنه يعمل الآن. https://github.com/mrniko/netty-socketio/issues/614
لدي نفس المشكلة بغض النظر عما إذا اخترت Websocket أو الاقتراع. إما خطأ websocket_error أو خطأ استطلاع xhr.
عنوان URL هو عنوان IP (http://192.168.1.112:3000) وأنا أقوم بالاتصال من هاتف فعلي بجهاز كمبيوتر على نفس الشبكة المحلية باستخدام React Native Expo.
يمكنني المساعدة إذا كنت بحاجة إلى مزيد من تتبع المكدس أو المعلومات ...
socket.io 2.2.0 // كل من العميل والخادم
engine.io 3.3.2 // كل من العميل والخادم
يبدو وكأنه مشكلة خارج socket.io ، إذا كان كل من مقبس الويب ونقل الاقتراع لا يعملان. قد ترغب في المحاولة:
fetch
إلى الخادم الخاص بك. إذا لم يفلح ذلك ، فمن المحتمل أن تكون هناك مشكلة في الشبكة أو بيئة React Native.سأحاول الاختبار الأول ، الجلب العادي يعمل
تحرير: يبدو أنه مشكلة متعلقة بـ CORS. إذا حاولت توصيل عميل JS بسيط ، فسأحصل على:
Access to XMLHttpRequest at 'http://192.168.1.112:3000/socket.io/?EIO=3&transport=polling&t=MfV8vhI' from origin 'http://192.168.1.112:5000' has been blocked by CORS policy: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.
أي نصيحة حول كيفية إعداد هذا؟
جرب الإصدار الأخير من جيثب ، مثل هذا ، حل مشاكلي مع RN android:
npm i socketio/engine.io-client#3.3.2 -S
لا شيء يبدو أنه يعمل مع التفاعل الأصلي 0.60
لا يعمل إصدار Android عند استخدام RN 0.60.5
تم تجربة إصدارات socket.io-client 2.0.4 و 2.1.1 و 2.2.0.
حاولت yarn add socketio/engine.io-client#3.3.2
انظر # 1305 - على Android ، تحتاج إلى استخدام https أو تعيين سمة الاستخدامات CleartextTraffic في AndroidManifest
جرب v2.3
حاولت استخدام Expo SDK v34 و v35 (RN 0.59) واضطررت إلى الرجوع إلى إصدار أقدم من socket.io-client إلى 1.7.2 ( yarn add [email protected]
) كما فعلت الإصدارات الأخرى (2.1.1 ، 2.1.0 ، 2.2.0) لا يعمل. لم أحاول 2.3.0 ، الآن بعد أن نجحت ، لا أريد مشاكل :-)
مرحبًا lionbur ، كما أعلم أن هناك العديد من الإصدارات المصغرة من 0.59. ما هو الإصدار الذي تستخدمه؟ 0.59.9؟
شكرا لكم مقدما!
التعليق الأكثر فائدة
لا شيء يبدو أنه يعمل مع التفاعل الأصلي 0.60