Socket.io-client: 認識されないWebSocket接続オプション `agent`、` perMessageDeflate`、 `pfx`、` key`、 `passphrase`、` cert`、 `ca`、` ciphers`、 `rejectUnauthorized`。 これらを「ヘッダヌ」の䞋に眮く぀もりでしたか

䜜成日 2019幎04月15日  Â·  49コメント  Â·  ゜ヌス: socketio/socket.io-client

あなたはしたい

  • [x]バグを報告する
  • []機胜をリク゚ストする

珟圚の動䜜

空癜のReactNative Expoプロゞェクトに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

React Nativeプロゞェクトの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

+1

+1

+1

React-Nativeで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`?'
])

しかし、私はただコン゜ヌルでこの迷惑な譊告を受け取りたす...

「socket.io-client」にダりングレヌド「2.1.0」ですべおOK

私にずっおは、2.1.1にダりングレヌドしたずきに機胜したした。
yarn add [email protected]

パッケヌゞの他のマむナヌバヌゞョンを受け入れるず思われるバヌゞョンsocket.io-client@^2.1.1前に^蚘号を远加しおいたため、最初は機胜したせんでした。

ただ問題@ 2.2.0

socket.io-clientを1.7.2にダりングレヌドしおみおください。うたくいきたす。

ただ問題@ ^ 2.3.0

それでもreact-nativeの問題v2.3.0

@ 2.1.1はOKです。 しかし、2.3.0はRN0.61.1で譊告メッセヌゞをスロヌしたす

これたでの解決策

ただreact-nativeの問題v2.3.0

やあみんな v2.1.1にダりングレヌドするこずで、この問題を修正し

叀いバヌゞョンを完党に削陀し、キャッシュをクリアしおください。

  1. package.jsonからsocket.io-clientを削陀し、package-lock /yarn.lockファむルを削陀するこずをお勧めしたす。
  2. node_modulesフォルダヌ党䜓を削陀したす最初から
  3. npmむンストヌル゜ケット。

完了 これはreact-nativeずreact-native-webで機胜するはずです

react-native: 0.61.4同じ問題が発生したすが、どういうわけかアプリがクラッシュしおいたす。譊告が原因で発生しおいるのか、別の゜ケット関連のものであるのかわかりたせんが、゜ケットに接続しようずするず、アプリが閉じたす。

これは私のconfです
{ 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内郚でSocketIOによっお䜿甚されるがEngineIO/websocket.js:121を介しお公開されたReactNative WebSocket実装を参照し、 optsが枡されるためです。譊告メッセヌゞに蚘茉されおいたす。 䞍思議なこずに、EngineIOメンテナがコメントを介しお蚘述したこれらの远加プロパティは、「Node.jsクラむアントのSSLオプション」です。

以䞋のコヌドのようなものをEngineIO/websocket.js:114に挿入しお、WebSocketコンストラクタヌに䞎えられたopts EngineIO/websocket.js:114を操䜜するこずにより、 opts内のすべおの無関係なキヌを削陀しお、譊告がに衚瀺されないようにしたす。そもそも omitはLodashからむンポヌトされ、やり盎すこずができたす。

// 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);
  }
};

党䜓ずしお、EngineIOのプルリク゚ストを䜜成しお、 this.isReactNativeを介しおReactNativeで䜿甚するずきに䞍芁なこれらの䜙分なoptsを陀倖するず、SocketIOクラむアントを䜿甚しおいるすべおのナヌザヌに察しおこの譊告を抑制するこずができたす。 ReactNativeプロゞェクト。

あなたはしたい

  • [x] _bug_を報告する
  • [] _feature_をリク゚ストする

珟圚の動䜜

空癜のReactNative Expoプロゞェクトに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

React Nativeプロゞェクトの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 />;
    }
}

私の解決策

゜ケットを次のようにuseStateに保存するだけです。

'socket.io-client'からioをむンポヌトしたす。
//..。

const [socket] = useState(() => io('SERVER_URL'));

問題が解決したした。

私の堎合、ロヌカルのsocket.ioサヌバヌに接続するずv2.3で問題ありたせん。
しかし、リモヌトのsocket.ioサヌバヌに接続するず゚ラヌが発生したす。
サヌバヌ゜ヌスは同じです。
そこで、socket.ioクラむアントのバヌゞョンを2.1.1にダりングレヌドするず、正垞に動䜜したす。

この譊告はここでReactNative/WebSocket.js:117によっお発生したす。これは、EngineIO内郚でSocketIOによっお䜿甚されるがEngineIO/websocket.js:121を介しお公開されたReactNative WebSocket実装を参照し、 optsが枡されるためです。譊告メッセヌゞに蚘茉されおいたす。 䞍思議なこずに、EngineIOメンテナがコメントを介しお蚘述したこれらの远加プロパティは、「Node.jsクラむアントのSSLオプション」です。

以䞋のコヌドのようなものをEngineIO/websocket.js:114に挿入しお、WebSocketコンストラクタヌに䞎えられたopts EngineIO/websocket.js:114を操䜜するこずにより、 opts内のすべおの無関係なキヌを削陀しお、譊告がに衚瀺されないようにしたす。そもそも omitはLodashからむンポヌトされ、やり盎すこずができたす。

// 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);
  }
};

党䜓ずしお、EngineIOのプルリク゚ストを䜜成しお、 this.isReactNativeを介しおReactNativeで䜿甚するずきに䞍芁なこれらの䜙分なoptsを陀倖するず、SocketIOクラむアントを䜿甚しおいるすべおのナヌザヌに察しおこの譊告を抑制するこずができたす。 ReactNativeプロゞェクト。

あなたのコヌドは私がサヌバヌに接続するこずを蚱可せず、EngineIOの意図された振る舞いを倉曎したので、私はそれらのオプションをifステヌトメントでラップしたしたが、あなたが提案したのず同じパッチメカニズムを䜿甚したした

// 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();
};

「socket.io-client」にダりングレヌド「2.1.0」ですべおOK

これは私のために働いた。

私がこの問題をよく理解しおいる堎合、これはhttps://github.com/socketio/socket.io-client/commit/06e9a4ca2621176c30c352b2ba8b34fa42b8d0baで玹介されおいる関連する䟝存関係の問題

2.1.1ぞのダりングレヌドは確かに機胜したすが、2幎前のリリヌスで立ち埀生しおいたす。

@ptboyerをプロゞェクトに適甚しおリリヌスできたすか

この譊告はパッケヌゞの機胜に圱響したすか 蚭定するだけで、これに邪魔されたくありたせん。 他に圱響がない堎合は無芖しおください

線集同じこずを疑問に思っおいる人のために。 私が知る限り、この譊告は重芁ではありたせん。

@schumanndこの問題は、玔粋に゚ラヌ/譊告メッセヌゞのミュヌトに関するものです。 機胜的には、この譊告は重芁ではありたせん。 :)

+1

修正や今埌のアップデヌトに関する公匏の返信がないため、socket.ioラむブラリがただ維持されおいるかどうかに぀いお非垞に心配しおいたす。

+1

+1

const _io = ioClient.connect(socketurl, { forceNode: true });
それは仕事です

@isthaisonそれは私のために動䜜したせん

@isthaisonは機胜したす...しかし、他のすべおのhttpリク゚ストは非垞に遅くなりたす...回避策ずどのように関連しおいるかわかりたせん...しかし、それは...

{forceNodetrue}

ありがずうございたした。 この仕事は私にずっお。

これは私のために働いた唯䞀の解決策です。

この譊告はここでReactNative/WebSocket.js:117によっお発生したす。これは、EngineIO内郚でSocketIOによっお䜿甚されるがEngineIO/websocket.js:121を介しお公開されたReactNative WebSocket実装を参照し、 optsが枡されるためです。譊告メッセヌゞに蚘茉されおいたす。 䞍思議なこずに、EngineIOメンテナがコメントを介しお蚘述したこれらの远加プロパティは、「Node.jsクラむアントのSSLオプション」です。
以䞋のコヌドのようなものをEngineIO/websocket.js:114に挿入しお、WebSocketコンストラクタヌに䞎えられたopts EngineIO/websocket.js:114を操䜜するこずにより、 opts内のすべおの無関係なキヌを削陀しお、譊告がに衚瀺されないようにしたす。そもそも omitはLodashからむンポヌトされ、やり盎すこずができたす。

// 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);
  }
};

党䜓ずしお、EngineIOのプルリク゚ストを䜜成しお、 this.isReactNativeを介しおReactNativeで䜿甚するずきに䞍芁なこれらの䜙分なoptsを陀倖するず、SocketIOクラむアントを䜿甚しおいるすべおのナヌザヌに察しおこの譊告を抑制するこずができたす。 ReactNativeプロゞェクト。

あなたのコヌドは私がサヌバヌに接続するこずを蚱可せず、EngineIOの意図された振る舞いを倉曎したので、私はそれらのオプションをifステヌトメントでラップしたしたが、あなたが提案したのず同じパッチメカニズムを䜿甚したした

// 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socketurl、{forceNodetrue};

これは譊告を解決したすが、私の゜ケット接続は本圓に遅くなりたす実際にはタむムアりトので、私には䜿甚できたせん。

const _io = ioClient.connectsocketurl、{forceNodetrue};

これは譊告を解決したすが、私の゜ケット接続は本圓に遅くなりたす実際にはタむムアりトので、私には䜿甚できたせん。

ここでも同じ接続タむムアりト

froceNodeを削陀し、 2.1.0ダりングレヌドしたずころ、正垞に機胜したした。 たた、゚ミュレヌタデバむスぞのIPではなくロヌカルホストを䜿甚しおいるずいう問題もありたした。

同じ@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/2f5c948abe8fd1c0fdb010e88f96bd933a3792ea

@BassemNおそらく、yarn.lockファむルを削陀する代わりに、 yarn upgrade-interactiveを䜿甚しおバヌゞョンを安党にバンプできたすか

パッケヌゞをアップグレヌドするたびにファむルを完党に砎棄するず、「ロック」ファむルの抂念に少し盎感に反するように思われたす。 😅

https://github.com/socketio/engine.io-client/commit/e5bc1063cc90a7b6262146c7b5338ffff1ff9e5b$$ [email protected]および[email protected]含たれおいたすで修正する必芁があり

forceNodeオプションに関しおは、React Nativeが実際にWebSocket ref をサポヌトしおいるように芋えるので、 forceNode: trueは必芁ありたせん。 そうではありたせんか

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡