Socket.io-client: рдЕрдкрд░рд┐рдЪрд┐рдд WebSocket рдХрдиреЗрдХреНрд╢рди рд╡рд┐рдХрд▓реНрдк (рдУрдВ) `рдПрдЬреЗрдВрдЯ`,` perMessageDeflate`, `pfx`,` key`, `passphrase`,` cert`, `ca`,` cipersers`, `rejectUnauthorized`ред рдХреНрдпрд╛ рдЖрдк `рд╣реЗрдбрд░` рдХреЗ рддрд╣рдд рдЗрдиреНрд╣реЗрдВ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдорддрд▓рдм рд░рдЦрддреЗ рдереЗ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 15 рдЕрдкреНрд░реИрд▓ 2019  ┬╖  49рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: socketio/socket.io-client

рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐:

  • [x] рдмрдЧ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВ
  • [] рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ

рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░

рдЬрдм рдореИрдВ рдПрдХ рд░рд┐рдХреНрдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореВрд▓ рдирд┐рд╡рд╛рд╕реА рдПрдХреНрд╕рдкреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ 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 />;
    }
}

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рддрдм рдХрд╛рдо рдЖрдпрд╛ рдЬрдм рдореИрдВрдиреЗ 2.1.1 рдкрд░ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд┐рдпрд╛ рдерд╛:
yarn add [email protected]

рдкрд╣рд▓реЗ рддреЛ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдореИрдВ ^ рдкреНрд░рддреАрдХ рдХреЛ socket.io-client@^2.1.1 рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдЬреЛрдбрд╝ рд░рд╣рд╛ рдерд╛, рдЬреЛ рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдкреИрдХреЗрдЬ рдХреЗ рдЕрдиреНрдп рдорд╛рдореВрд▓реА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рд╕рднреА 49 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ :(

+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 рдореЗрдВ рдбрд╛рдЙрдирдЧреНрд░реЗрдб рдХрд░рдХреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░ рджрд┐рдпрд╛ рд╣реИ

рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЖрдк рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдХреИрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░реЗрдВред

  1. package.json рд╕реЗ socket.io- рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рдЕрдкрдиреЗ рдкреИрдХреЗрдЬ-рд▓реЙрдХ / рдпрд╛рд░реНрди.рд▓реЙрдХ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдЯрд╛ рджреЗрдВред
  2. рдЕрдкрдирд╛ рдкреВрд░рд╛ рдиреЛрдб_рдореЙрдбрд▓ рдлрд╝реЛрд▓реНрдбрд░ рд╣рдЯрд╛рдПрдВ (рдирдП рд╕рд┐рд░реЗ рд╕реЗ рд╢реБрд░реВ рдХрд░реЗрдВ)
  3. npm рд╕реНрдерд╛рдкрд┐рдд рд╕реЙрдХреЗрдЯред

рдХрд┐рдпрд╛ рд╣реБрдЖ! рдпрд╣ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓-рд╡реЗрдм рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП!

рдореЗрд░реЗ рдкрд╛рд╕ 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 рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рдХреНрдпрд╛ рдпрд╣ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИ?

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

ahadcove picture ahadcove  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

BorntraegerMarc picture BorntraegerMarc  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

XMLHttpRequest рдкрд░ 'http: // localhost: 8080 / socket.io /? EIO = 3 рдФрд░ рдкрд░рд┐рд╡рд╣рди = рдорддрджрд╛рди рдФрд░ t = MgBuvgw' рдХреЛ рдореВрд▓ 'http: // localhost: 4200' рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдЬрд┐рд╕реЗ CorS рдиреАрддрд┐ рджреНрд╡рд╛рд░рд╛ рдЕрд╡рд░реЛрдзрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ: 'Access-Control-' рдЕрдиреБрдорддрд┐-рдкреНрд░рд╛рдкреНрдд 'рд╢реАрд░реНрд╖рд▓реЗрдЦ рдЕрдиреБрд░реЛрдзрд┐рдд рд╕рдВрд╕рд╛рдзрди рдкрд░ рдореМрдЬреВрдж рд╣реИред
imarun577 picture imarun577  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

najibghadri picture najibghadri  ┬╖  7рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

Warrior-hound picture Warrior-hound  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ