空çœã®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 />;
}
}
åãåé¡:(
+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ã«ããŠã³ã°ã¬ãŒãããããšã§ããã®åé¡ãä¿®æ£ã
å€ãããŒãžã§ã³ãå®å šã«åé€ãããã£ãã·ã¥ãã¯ãªã¢ããŠãã ããã
å®äºïŒ ããã¯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
ã¯å¿
èŠãããŸããã ããã§ã¯ãããŸãããïŒ
æãåèã«ãªãã³ã¡ã³ã
ç§ã«ãšã£ãŠã¯ã2.1.1ã«ããŠã³ã°ã¬ãŒããããšãã«æ©èœããŸããã
yarn add [email protected]
ããã±ãŒãžã®ä»ã®ãã€ããŒããŒãžã§ã³ãåãå ¥ãããšæãããããŒãžã§ã³
socket.io-client@^2.1.1
åã«^
èšå·ãè¿œå ããŠãããããæåã¯æ©èœããŸããã§ããã