рдЬрдм рдореИрдВ рдПрдХ рд░рд┐рдХреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдПрдХреНрд╕рдкреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ socket.io-client
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреАрд▓рд╛ рд╕рдВрджреЗрд╢ рд╣реИ:
Unrecognized WebSocket connection option(s) `agent`, `perMessageDeflate`, `pfx`, `key`, `passphrase`, `cert`, `ca`, `ciphers`, `rejectUnauthorized`. Did you mean to put these under `headers`?
yarn add socket.io-client
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдореВрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ App.js рдореЗрдВ:
import React from 'react';
import { YellowBox } from 'react-native';
import io from 'socket.io-client';
YellowBox.ignoreWarnings(['Remote debugger']);
import AppContainer from './config/routing';
export default class App extends React.Component {
constructor(props) {
super(props);
}
componentWillMount() {
const socket = io('http://10.0.60.26:3000', {
forceNew: true
});
socket.on('connect', () => console.log('Connection'));
}
render() {
return <AppContainer />;
}
}
рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ :(
+1
+1
+1
рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо 18 рджрд┐рд╕рдВрдмрд░ рдХреЗ рдмрд╛рдж рд╕реЗ рдПрдХ рдореБрджреНрджрд╛
+1
+1
+1
+1
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдкрд░ socket.io (2.2.0) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рдЕрднреА рднреА рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓ рд░рд╣реА рд╣реИред рдореИрдВ рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрдХреНрд░реАрди рдкрд░ рдкреАрд▓реЗ рдмреЙрдХреНрд╕ рдХреЛ рдЪреБрдк рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ:
import { YellowBox } from 'react-native'
YellowBox.ignoreWarnings([
'Unrecognized WebSocket connection option(s) `agent`, `perMessageDeflate`, `pfx`, `key`, `passphrase`, `cert`, `ca`, `ciphers`, `rejectUnauthorized`. Did you mean to put these under `headers`?'
])
рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЕрднреА рднреА рдХрдВрд╕реЛрд▓ рдкрд░ рдпрд╣ рдХрд╖реНрдЯрдкреНрд░рдж рдЪреЗрддрд╛рд╡рдиреА рдорд┐рд▓ рд░рд╣реА рд╣реИ ...
"рд╕реЙрдХреЗрдЯ.-рдХреНрд▓рд╛рдЗрдВрдЯ" рдХреЗ рд▓рд┐рдП рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░реЗрдВ: "2.1.0" рдФрд░ рд╕рдм рдареАрдХ рд╣реИ
рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рддрдм рдХрд╛рдо рдЖрдпрд╛ рдЬрдм рдореИрдВрдиреЗ 2.1.1 рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдерд╛:
yarn add [email protected]
рдкрд╣рд▓реЗ рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ ^
рдкреНрд░рддреАрдХ рдХреЛ socket.io-client@^2.1.1
рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝ рд░рд╣рд╛ рдерд╛, рдЬреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкреИрдХреЗрдЬ рдХреЗ рдЕрдиреНрдп рдорд╛рдореВрд▓реА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред
рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ @ 2.2.0
рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ-рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ 1.7.2 рдкрд░ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдлрд┐рд░ рднреА рдПрдХ рдореБрджреНрджрд╛ @ ^ 2.3.0
рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ v2.3.0
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдХреЗ рд╕рд╛рде
@ 2.1.1 рдареАрдХ рд╣реИред рд▓реЗрдХрд┐рди 2.3.0 RN 0.61.1 рдкрд░ рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрджреЗрд╢ рдлреЗрдВрдХрддрд╛ рд╣реИ
рдЕрдм рддрдХ рдХреЛрдИ рд╕рдорд╛рдзрд╛рди
рдЕрднреА рднреА рдПрдХ рдореБрджреНрджрд╛ v2.3.0 рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рджреЗрд╢реА рдХреЗ рд╕рд╛рде
рд╣реЗ рд▓реЛрдЧреЛрдВ! рд╣рдордиреЗ v2.1.1 рдореЗрдВ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИ
рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдХреИрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВред
рдХрд┐рдпрд╛ рд╣реБрдЖ! рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓-рд╡реЗрдм рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП!
рдореЗрд░реЗ рдкрд╛рд╕ react-native: 0.61.4
рд╕рд╛рде рдПрдХ рд╣реА рдореБрджреНрджрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдРрдк рдХреНрд░реИрд╢ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рдХрд╛рд░рдг рд╣реЛ рд░рд╣рд╛ рд╣реИ рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕реЙрдХреЗрдЯ-рд╕рдВрдмрдВрдзрд┐рдд рдЪреАрдЬрд╝ рд╣реИ, рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рд╕реЙрдХреЗрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдРрдк рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣ рдореЗрд░рд╛ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣реИ:
{
autoConnect: false,
reconnectionDelay: 1000,
reconnection: true,
transports: ['websocket'],
agent: false, // [2] Please don't set this to true
upgrade: false,
rejectUnauthorized: false
}
рдЕрдЧрд░ рд╕реЙрдХреЗрдЯ рдкрд╣рд▓реЗ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реИ рддреЛ рдХреНрдпрд╛
socket.open
рдХреНрд░реИрд╢ рд╣реЛрддрд╛ рд╣реИ?
рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ ReactNative/WebSocket.js:117
рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ EngineIO (рд╣реБрдб рдХреЗ рддрд╣рдд рд╕реЙрдХреЗрдЯрд┐рдпреЛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) EngineIO/websocket.js:121
рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдЧрдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╡реЗрдмрд╕реНрдХреЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдЧрд╛ рдЬреЛ opts
рдкрд╛рд░рд┐рдд рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧреБрдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛рд╡рд╢ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ, рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ EngineIO рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдпреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдг "Node.js рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдПрд▓ рд╡рд┐рдХрд▓реНрдк" рд╣реИрдВред
EngineIO/websocket.js:114
рдкрд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рдХрд░ opts
рдЬреЛрдбрд╝-рддреЛрдбрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WebSocket рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рджрд┐рдП рдЧрдП рд╣рдо opts
рдореЗрдВ рд╕рднреА рдмрд╛рд╣рд░реА рдХреБрдВрдЬреА рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд╛рд▓ рджреЗрддреЗ рд╣реИрдВ рдкрд╣рд▓реА рдЬрдЧрд╣ ( omit
рдХреЛ рд▓реЛрдзрд╢ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред
// lib/transports/websocket.js
...
if (this.isReactNative) {
// prettier-ignore
opts = omit(opts, ['agent', 'perMessageDeflate', 'pfx', 'key', 'passphrase', 'cert', 'ca', 'ciphers', 'rejectUnauthorized']);
}
...
рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ YellowBox.ignoreWarnings
рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд╢рд╛рдорд┐рд▓ рди рдХрд░рдирд╛ рд╣реЛ рддреЛ рдЖрдк doOpen
рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рдХреБрдЫ рдРрд╕рд╛ рдЬреЛрдбрд╝рдХрд░ EngineIO/websocket.js:87
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред , рдЖрдкрдХреЗ ReactNative рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд░, рдЖрдорддреМрд░ рдкрд░ index.js
ред
// index.js
...
+ import 'patches/EngineIOHeaderWarning';
...
// patches/EngineIOHeaderWarning.js
const WS = require('engine.io-client/lib/transports/websocket');
var WebSocketImpl = WebSocket; // eslint-disable-line no-undef
WS.prototype.doOpen = function() {
if (!this.check()) {
// let probe timeout
return;
}
var uri = this.uri();
var protocols = this.protocols;
var opts = {};
if (this.extraHeaders) {
opts.headers = this.extraHeaders;
}
if (this.localAddress) {
opts.localAddress = this.localAddress;
}
try {
this.ws = new WebSocketImpl(uri, protocols, opts);
} catch (err) {
return this.emit('error', err);
}
};
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпрджрд┐ рд╣рдо рдЗрди рдЕрддрд┐рд░рд┐рдХреНрдд opts
рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП EngineIO рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рддрдм рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдЬрдм ReactNative рдореЗрдВ this.isReactNative
рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рднреА рдЙрдирдХреЗ рд▓рд┐рдП рд╕реЙрдХреЗрдЯрд┐рдпреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рджрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВред
рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐:
- [x] рдПрдХ _bug_ рд░рд┐рдкреЛрд░реНрдЯ
- [] рдПрдХ _feature_ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ
рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░
рдЬрдм рдореИрдВ рдПрдХ рд░рд┐рдХреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдПрдХреНрд╕рдкреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░
socket.io-client
рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдПрдХ рдкреАрд▓рд╛ рд╕рдВрджреЗрд╢ рд╣реИ:Unrecognized WebSocket connection option(s) `agent`, `perMessageDeflate`, `pfx`, `key`, `passphrase`, `cert`, `ca`, `ciphers`, `rejectUnauthorized`. Did you mean to put these under `headers`?
рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрджрдо (рдпрджрд┐ рдореМрдЬреВрджрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрдЧ рд╣реИ)
yarn add socket.io-client
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдореВрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ App.js рдореЗрдВ:
import React from 'react'; import { YellowBox } from 'react-native'; import io from 'socket.io-client'; YellowBox.ignoreWarnings(['Remote debugger']); import AppContainer from './config/routing'; export default class App extends React.Component { constructor(props) { super(props); } componentWillMount() { const socket = io('http://10.0.60.26:3000', { forceNew: true }); socket.on('connect', () => console.log('Connection')); } render() { return <AppContainer />; } }
рдореЗрд░рд╛ рд╕рдорд╛рдзрд╛рди:
рдмрд╕ рд╕реЙрдХреЗрдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрдкрдпреЛрдЧ рдореЗрдВ рд╕рд╣реЗрдЬреЗрдВ:
'socket.io-client' рд╕реЗ рдЖрдпрд╛рдд io;
// ...
const [socket] = useState(() => io('SERVER_URL'));
рд╕рдорд╕реНрдпрд╛ рд╕реБрд▓рдЭ рдЧрдпреАред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, v2.3 рдареАрдХ рд╣реИ рдЬрдм рдореИрдВ рд╕реНрдерд╛рдиреАрдп рд╕реЙрдХреЗрдЯ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реВрдВ редio рд╕рд░реНрд╡рд░ред
рд▓реЗрдХрд┐рди рдпрд╣ рддреНрд░реБрдЯрд┐ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рдореИрдВ рджреВрд░рд╕реНрде рд╕реЙрдХреЗрдЯ.io рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реВрдВред
рд╕рд░реНрд╡рд░ рд╕реНрд░реЛрдд рд╕рдорд╛рди рд╣реИред
рдЗрд╕рд▓рд┐рдП рдореИрдВ 2.1.1 рдХреЗ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдХреНрд▓рд╛рдЗрдВрдЯ рд╡рд░реНрдЬрди рдХреЛ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ
ReactNative/WebSocket.js:117
рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ EngineIO (рд╣реБрдб рдХреЗ рддрд╣рдд рд╕реЙрдХреЗрдЯрд┐рдпреЛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)EngineIO/websocket.js:121
рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдЧрдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╡реЗрдмрд╕реНрдХреЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдЧрд╛ рдЬреЛopts
рдкрд╛рд░рд┐рдд рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧреБрдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛рд╡рд╢ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ, рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ EngineIO рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдпреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдг "Node.js рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдПрд▓ рд╡рд┐рдХрд▓реНрдк" рд╣реИрдВред
EngineIO/websocket.js:114
рдкрд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рдХрд░opts
рдЬреЛрдбрд╝-рддреЛрдбрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WebSocket рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рджрд┐рдП рдЧрдП рд╣рдоopts
рдореЗрдВ рд╕рднреА рдмрд╛рд╣рд░реА рдХреБрдВрдЬреА рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд╛рд▓ рджреЗрддреЗ рд╣реИрдВ рдкрд╣рд▓реА рдЬрдЧрд╣ (omit
рдХреЛ рд▓реЛрдзрд╢ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред// lib/transports/websocket.js ... if (this.isReactNative) { // prettier-ignore opts = omit(opts, ['agent', 'perMessageDeflate', 'pfx', 'key', 'passphrase', 'cert', 'ca', 'ciphers', 'rejectUnauthorized']); } ...
рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ
YellowBox.ignoreWarnings
рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд╢рд╛рдорд┐рд▓ рди рдХрд░рдирд╛ рд╣реЛ рддреЛ рдЖрдкdoOpen
рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рдХреБрдЫ рдРрд╕рд╛ рдЬреЛрдбрд╝рдХрд░EngineIO/websocket.js:87
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред , рдЖрдкрдХреЗ ReactNative рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд░, рдЖрдорддреМрд░ рдкрд░index.js
ред// index.js ... + import 'patches/EngineIOHeaderWarning'; ...
// patches/EngineIOHeaderWarning.js const WS = require('engine.io-client/lib/transports/websocket'); var WebSocketImpl = WebSocket; // eslint-disable-line no-undef WS.prototype.doOpen = function() { if (!this.check()) { // let probe timeout return; } var uri = this.uri(); var protocols = this.protocols; var opts = {}; if (this.extraHeaders) { opts.headers = this.extraHeaders; } if (this.localAddress) { opts.localAddress = this.localAddress; } try { this.ws = new WebSocketImpl(uri, protocols, opts); } catch (err) { return this.emit('error', err); } };
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпрджрд┐ рд╣рдо рдЗрди рдЕрддрд┐рд░рд┐рдХреНрдд
opts
рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП EngineIO рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рддрдм рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдЬрдм ReactNative рдореЗрдВthis.isReactNative
рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рднреА рдЙрдирдХреЗ рд▓рд┐рдП рд╕реЙрдХреЗрдЯрд┐рдпреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рджрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВред
рдЖрдкрдХрд╛ рдХреЛрдб рдореБрдЭреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ рдФрд░ EngineIO рдХреЗ рдЗрдЪреНрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдПрдХ рдЗрдл рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЙрд╕реА рдкреИрдЪ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдиреЗ рд╕реБрдЭрд╛рдпрд╛ рдерд╛
// patches/EngineIOHeaderWarning.js
const WS = require('engine.io-client/lib/transports/websocket');
var WebSocketImpl = WebSocket; // eslint-disable-line no-undef
WS.prototype.doOpen = function() {
if (!this.check()) {
// let probe timeout
return;
}
var uri = this.uri();
var protocols = this.protocols;
var opts = {};
if(!this.isReactNative){
opts.agent = this.agent;
opts.perMessageDeflate = this.perMessageDeflate;
// SSL options for Node.js client
opts.pfx = this.pfx;
opts.key = this.key;
opts.passphrase = this.passphrase;
opts.cert = this.cert;
opts.ca = this.ca;
opts.ciphers = this.ciphers;
opts.rejectUnauthorized = this.rejectUnauthorized;
}
if (this.extraHeaders) {
opts.headers = this.extraHeaders;
}
if (this.localAddress) {
opts.localAddress = this.localAddress;
}
try {
this.ws =
this.usingBrowserWebSocket && !this.isReactNative
? protocols
? new WebSocketImpl(uri, protocols)
: new WebSocketImpl(uri)
: new WebSocketImpl(uri, protocols, opts);
} catch (err) {
return this.emit('error', err);
}
if (this.ws.binaryType === undefined) {
this.supportsBinary = false;
}
if (this.ws.supports && this.ws.supports.binary) {
this.supportsBinary = true;
this.ws.binaryType = 'nodebuffer';
} else {
this.ws.binaryType = 'arraybuffer';
}
this.addEventListeners();
};
"рд╕реЙрдХреЗрдЯ.-рдХреНрд▓рд╛рдЗрдВрдЯ" рдХреЗ рд▓рд┐рдП рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░реЗрдВ: "2.1.0" рдФрд░ рд╕рдм рдареАрдХ рд╣реИ
рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред
рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдХреНрдпрд╛ рдпрд╣ рд╕рдВрдмрдВрдзрд┐рдд рдирд┐рд░реНрднрд░рддрд╛ рдХрд╛ рдореБрджреНрджрд╛ https://github.com/socketio/socket.io-client/commit/06e9a4ca2621176c302b2ba8ba34ffa42b8d0ba рдореЗрдВ рд╣реИ?
2.1.1 рдХреЗ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рджреЛ рд╕рд╛рд▓ рдкреБрд░рд╛рдиреЗ рд░рд┐рд▓реАрдЬ рдкрд░ рдЕрдЯрдХ рдЧрдП рд╣реИрдВред
рдХреНрдпрд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдкрд░ @ptboyer рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?
рдХреНрдпрд╛ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдкреИрдХреЗрдЬ рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддреА рд╣реИ? рдмрд╕ рдЗрд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рдФрд░ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдЖрдпреЛрдЬрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рдпрджрд┐ рдЗрд╕рдХреЗ рдХреЛрдИ рдЕрдиреНрдп рдкрд░рд┐рдгрд╛рдо рди рд╣реЛрдВ рддреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдХрд┐рд╕реА рдХреЛ рднреА рдПрдХ рд╣реА рдмрд╛рдд рд╕реЛрдЪ рдХреЗ рд▓рд┐рдПред рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдореИрдВ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдЕрд╕рдВрдЧрдд рд╣реИред
@schumannd рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреНрд░реБрдЯрд┐ / рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрджреЗрд╢ рдХреЛ рдореНрдпреВрдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд░реВрдк рд╕реЗ, рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдЕрд╕рдВрдЧрдд рд╣реИред :)
+1
рдореИрдВ рдЗрд╕ рдмрд╛рдд рд╕реЗ рдмрд╣реБрдд рдЪрд┐рдВрддрд┐рдд рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЕрднреА рднреА рдмрдиреА рд╣реБрдИ рд╣реИ рдпрд╛ рдирд╣реАрдВ, рдХреНрдпреЛрдВрдХрд┐ рдлрд┐рдХреНрд╕ рдпрд╛ рдЖрдЧрд╛рдореА рдЕрдкрдбреЗрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреЛрдИ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЬрд╡рд╛рдм рдирд╣реАрдВ рд╣реИред
+1
+1
const _io = ioClient.connect(socketurl, { forceNode: true });
рдпрд╣реА рдХрд╛рдо рд╣реИ
@isthaison рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
@ рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рд╣рд░ рджреВрд╕рд░реЗ http рдЕрдиреБрд░реЛрдз рдмрд╣реБрдд рдзреАрдорд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ ... рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ ... рдпрд╣ ...
{рдмрд▓рдХреЛрдб: рд╕рдЪ}
рдзрдиреНрдпрд╡рд╛рджред рдпрд╣ рдХрд╛рдо рдореЗрд░реЗ рд▓рд┐рдПред
рдпрд╣ рдПрдХрдорд╛рддреНрд░ рд╕рдорд╛рдзрд╛рди рд╣реИ рдЬрд┐рд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд┐рдпрд╛ред
рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ
ReactNative/WebSocket.js:117
рджреНрд╡рд╛рд░рд╛ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ EngineIO (рд╣реБрдб рдХреЗ рддрд╣рдд рд╕реЙрдХреЗрдЯрд┐рдпреЛ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ)EngineIO/websocket.js:121
рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдЬрд╛рдЧрд░ рдХрд┐рдП рдЧрдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╡реЗрдмрд╕реНрдХреЗрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╕рдВрджрд░реНрдн рджреЗрдЧрд╛ рдЬреЛopts
рдкрд╛рд░рд┐рдд рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЧреБрдг рд╢рд╛рдорд┐рд▓ рд╣реИрдВ рдЪреЗрддрд╛рд╡рдиреА рд╕рдВрджреЗрд╢ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рд╣реИред рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛рд╡рд╢ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ, рдЯрд┐рдкреНрдкрдгреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ EngineIO рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд░реНрдгрд┐рдд рдпреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЧреБрдг "Node.js рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рдПрд╕рдПрд╕рдПрд▓ рд╡рд┐рдХрд▓реНрдк" рд╣реИрдВред
EngineIO/websocket.js:114
рдкрд░ рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЛ рдЬреЛрдбрд╝рдХрд░opts
рдЬреЛрдбрд╝-рддреЛрдбрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП WebSocket рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рджрд┐рдП рдЧрдП рд╣рдоopts
рдореЗрдВ рд╕рднреА рдмрд╛рд╣рд░реА рдХреБрдВрдЬреА рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рджрд┐рдЦрд╛рдИ рджреЗрдиреЗ рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдХрд╛рд▓ рджреЗрддреЗ рд╣реИрдВ рдкрд╣рд▓реА рдЬрдЧрд╣ (omit
рдХреЛ рд▓реЛрдзрд╢ рд╕реЗ рдЖрдпрд╛рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ)ред// lib/transports/websocket.js ... if (this.isReactNative) { // prettier-ignore opts = omit(opts, ['agent', 'perMessageDeflate', 'pfx', 'key', 'passphrase', 'cert', 'ca', 'ciphers', 'rejectUnauthorized']); } ...
рдпрджрд┐ рдЖрдк рдПрдХ рдРрд╕реЗ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ
YellowBox.ignoreWarnings
рдорд╛рдзреНрдпрдо рд╕реЗ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд╢рд╛рдорд┐рд▓ рди рдХрд░рдирд╛ рд╣реЛ рддреЛ рдЖрдкdoOpen
рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕рд╛ рдХрд┐ рдиреАрдЪреЗ рдХреБрдЫ рдРрд╕рд╛ рдЬреЛрдбрд╝рдХрд░EngineIO/websocket.js:87
рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред , рдЖрдкрдХреЗ ReactNative рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдкреНрд░рд╡реЗрд╢ рдмрд┐рдВрджреБ рдкрд░, рдЖрдорддреМрд░ рдкрд░index.js
ред// index.js ... + import 'patches/EngineIOHeaderWarning'; ...
// patches/EngineIOHeaderWarning.js const WS = require('engine.io-client/lib/transports/websocket'); var WebSocketImpl = WebSocket; // eslint-disable-line no-undef WS.prototype.doOpen = function() { if (!this.check()) { // let probe timeout return; } var uri = this.uri(); var protocols = this.protocols; var opts = {}; if (this.extraHeaders) { opts.headers = this.extraHeaders; } if (this.localAddress) { opts.localAddress = this.localAddress; } try { this.ws = new WebSocketImpl(uri, protocols, opts); } catch (err) { return this.emit('error', err); } };
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдпрджрд┐ рд╣рдо рдЗрди рдЕрддрд┐рд░рд┐рдХреНрдд
opts
рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП EngineIO рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рддрдм рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ рдЬрдм ReactNative рдореЗрдВthis.isReactNative
рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рд╕рднреА рдЙрдирдХреЗ рд▓рд┐рдП рд╕реЙрдХреЗрдЯрд┐рдпреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рджрдмрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкрд░рд┐рдпреЛрдЬрдирд╛рдПрдВредрдЖрдкрдХрд╛ рдХреЛрдб рдореБрдЭреЗ рд╕рд░реНрд╡рд░ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрдЧрд╛ рдФрд░ EngineIO рдХреЗ рдЗрдЪреНрдЫрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рдПрдХ рдЗрдл рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЙрд╕реА рдкреИрдЪ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдиреЗ рд╕реБрдЭрд╛рдпрд╛ рдерд╛
// patches/EngineIOHeaderWarning.js const WS = require('engine.io-client/lib/transports/websocket'); var WebSocketImpl = WebSocket; // eslint-disable-line no-undef WS.prototype.doOpen = function() { if (!this.check()) { // let probe timeout return; } var uri = this.uri(); var protocols = this.protocols; var opts = {}; if(!this.isReactNative){ opts.agent = this.agent; opts.perMessageDeflate = this.perMessageDeflate; // SSL options for Node.js client opts.pfx = this.pfx; opts.key = this.key; opts.passphrase = this.passphrase; opts.cert = this.cert; opts.ca = this.ca; opts.ciphers = this.ciphers; opts.rejectUnauthorized = this.rejectUnauthorized; } if (this.extraHeaders) { opts.headers = this.extraHeaders; } if (this.localAddress) { opts.localAddress = this.localAddress; } try { this.ws = this.usingBrowserWebSocket && !this.isReactNative ? protocols ? new WebSocketImpl(uri, protocols) : new WebSocketImpl(uri) : new WebSocketImpl(uri, protocols, opts); } catch (err) { return this.emit('error', err); } if (this.ws.binaryType === undefined) { this.supportsBinary = false; } if (this.ws.supports && this.ws.supports.binary) { this.supportsBinary = true; this.ws.binaryType = 'nodebuffer'; } else { this.ws.binaryType = 'arraybuffer'; } this.addEventListeners(); };
const _io = ioClient.connect(socketurl, { forceNode: true });
рдпрд╣реА рдХрд╛рдо рд╣реИ
рдпрд╣ рдореЗрд░реЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж!
"socket.io-client": "^2.3.0"
const socket = io(host, { forceNode: true });
const _io = ioClient.connect(socketurl, { forceNode: true });
рдпрд╣реА рдХрд╛рдо рд╣реИрдпрд╣ рдореЗрд░реЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдзрдиреНрдпрд╡рд╛рдж!
"socket.io-client": "^2.3.0"
const socket = io(host, { forceNode: true });
рдЗрд╕рдиреЗ рдореЗрд░реЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд┐рдпрд╛! рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж
рдЖрдк рдмрд╕ рдХреБрдЫ рд╣реЗрдбрд░ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ!
socket = io.connect('SOCKET_URL_HERE', {
jsonp: false,
agent: '-',
pfx: '-',
cert: '-',
ca: '-',
ciphers: '-',
rejectUnauthorized: '-',
perMessageDeflate: '-'
});
const _io = ioClient.connect (рд╕реЙрдХреЗрдЯреБрд░рд▓, {рдмрд▓рдиреЛрдб: рд╕рдЪ});
рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдзреАрдорд╛ рдмрдирд╛рддрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ), рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреЛрдЧреА рд╣реИред
const _io = ioClient.connect (рд╕реЙрдХреЗрдЯреБрд░рд▓, {рдмрд▓рдиреЛрдб: рд╕рдЪ});
рдпрд╣ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдореЗрд░реЗ рд╕реЙрдХреЗрдЯ рдХрдиреЗрдХреНрд╢рди рдХреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╣реБрдд рдзреАрдорд╛ рдмрдирд╛рддрд╛ рд╣реИ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЯрд╛рдЗрдордЖрдЙрдЯ), рдЗрд╕рд▓рд┐рдП рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдиреБрдкрдпреЛрдЧреА рд╣реИред
рд╡рд╣реА рдпрд╣рд╛рдБ: рдХрдиреЗрдХреНрд╢рди рдЯрд╛рдЗрдордЖрдЙрдЯ!
рдореИрдВрдиреЗ рдлреНрд░реЙрд╕рдиреЛрдб рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛ рд▓рд┐рдпрд╛ рдФрд░ 2.1.0
рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдпрд╣ рдореБрджреНрджрд╛ рднреА рдерд╛ рдХрд┐ рдореИрдВ рдЕрдкрдиреЗ рдПрдореБрд▓реЗрдЯрд░ рдбрд┐рд╡рд╛рдЗрд╕ рдХреЗ рд▓рд┐рдП рд▓реЛрдХрд▓рд╣реЛрд╕реНрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рди рдХрд┐ рдЖрдИрдкреА рдХрд╛ред
рд╡рд╣реА @SaveYourTime , рдореИрдВ "socket.io-client": "^2.3.0"
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ
рдпрд╣рд╛рдВ рджреЗрдЦреЗрдВ https://socket.io/docs/client-api/ред
рдореИрдВ forceNode
рд╡рд┐рдХрд▓реНрдк рдХреНрдпреЛрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ
рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ engine.io-client
v3.4.3 рдкрд░ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЗрд╡рд▓ yarn.lock
рдлрд╝рд╛рдЗрд▓ рдФрд░ node_modules
рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╣реЛрдЧрд╛, рддрдм yarn install
рдЪрд▓рд╛рдПрдБ
рд░реЗрдлрд░реА https://github.com/socketio/engine.io-client/commit/2f5c948abe8fd1c1c0fdb010e88f96bd933a3792ea
@BassemN рд╢рд╛рдпрдж рдЕрдкрдиреЗ рдпрд╛рд░реНрди.рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЯрдХреНрдХрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП yarn upgrade-interactive
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдпрд╣ "рд▓реЙрдХ" рдлрд╝рд╛рдЗрд▓ рдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП рдереЛрдбрд╝рд╛ рдЬрд╡рд╛рдмреА-рд╕рд╣рдЬ рд▓рдЧрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ рдХреЛ рдЕрдкрдЧреНрд░реЗрдб рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╣рд░ рдмрд╛рд░ рдЗрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдирд╖реНрдЯ рдХрд░ рджреЗрддреЗ рд╣реИрдВред ЁЯШЕ
рдпрд╣ https://github.com/socketio/engine.io-client/commit/e5bc1063cc90a7b6262146c7335ff8fff9e5b ( [email protected]
рдФрд░ [email protected]
) рджреНрд╡рд╛рд░рд╛ рддрдп рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
forceNode
рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ WebSocket ( Ref ) рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП forceNode: true
рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ?
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рддрдм рдХрд╛рдо рдЖрдпрд╛ рдЬрдм рдореИрдВрдиреЗ 2.1.1 рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдерд╛:
yarn add [email protected]
рдкрд╣рд▓реЗ рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ
^
рдкреНрд░рддреАрдХ рдХреЛsocket.io-client@^2.1.1
рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝ рд░рд╣рд╛ рдерд╛, рдЬреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкреИрдХреЗрдЬ рдХреЗ рдЕрдиреНрдп рдорд╛рдореВрд▓реА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред