react-native socket.io 来自节点服务器的无尽请求

Posted

技术标签:

【中文标题】react-native socket.io 来自节点服务器的无尽请求【英文标题】:react-native socket.io endless requests from node server 【发布时间】:2021-08-10 02:38:48 【问题描述】:

我正在尝试一个非常简单的 expo App,只是为了看看如何使用 socket.io 并将其连接到服务器,这是我的 App.js-

import  StatusBar  from 'expo-status-bar';
import React,  useEffect, useState  from 'react';
import  StyleSheet, Text, View  from 'react-native';

import io from "socket.io-client";
export const  socket = io('http://0f03e059b74d.ngrok.io', 
  transports: ["websocket"]
)

export default function App() 

  return (
    <View style=styles.container>
      <Text>Open up App.js to start working on your app!</Text>
      <StatusBar style="auto" />
    </View>
  );


const styles = StyleSheet.create(
  container: 
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  ,
);

但由于某种原因,该应用程序正在从服务器发出无穷无尽的连接请求: 而且我不知道如何阻止这种情况并且只有一个连接? 这是 server.js-

const express = require('express');
const socket = require('socket.io');
const dotenv = require('dotenv');
const morgan = require('morgan');
const colors = require('colors');
const cookieParser = require('cookie-parser');
const errorHandler = require('./middleware/error');
const connectDB = require('./config/db.js');
const mongoose = require('mongoose');
let compression = require('compression');
let helmet = require('helmet');

//load env vars
dotenv.config( path: './config/config.env' );

// connect to data base
connectDB(); 

// Routs files
const auth = require('./routes/auth');

const app = express();

//body parser to read from req.body
app.use(express.json());

//Compress all routes
app.use(compression());

//protect against  vulnerabilities
app.use(helmet());

// prod logging middleware
if (process.env.NODE_ENV === `development`) 
  app.use(morgan(`dev`));


//mount ruters
app.use('/api/v1/auth', auth);
app.use(errorHandler);

const PORT = process.env.PORT || 5000;

const server = app.listen(
  PORT,
  console.log(
    `Server running in $process.env.NODE_ENV mode on port $PORT`.yellow.bold
  )
);

let io = socket(server);
app.set('socketio', io);
io.sockets.on('connection', function (socket) 
  console.log('try to connect');
  console.log('made socket connection', socket.id);
  socket.on('disconnect', reason => 
    console.log('user disconnected');
  );
);

// handle unhandled promise rejections
process.on('unhandledRejection', (err, Promise) => 
  console.log(`Errore:$err.massage`.red);
  //close server & exit process
  server.close(() => process.exit(1));
);

如果能得到任何帮助,我将不胜感激。 服务器 - https://github.com/MakGyv3r/socket_api.git app-https://github.com/MakGyv3r/socket_app.git

【问题讨论】:

您确定您粘贴了准确的代码吗?看起来它正在尝试连接到与example.com 不同的域,这不应该发生。 example.com 只是一个 URL 的示例,我使用 ngrok URL 连接到服务器。我将 ngrok url 放入代码中。 我认为最好将样本发布在某个沙盒中(例如 codesandbox.io ),否则我认为我们无能为力.. 我连接了 git 链接服务器 - github.com/MakGyv3r/socket_api.git app- github.com/MakGyv3r/socket_app.git 我尝试将应用添加到发送框,但它无法识别 react-native 依赖项。 【参考方案1】:

好的,问题解决了,socket.io的依赖没有更新到4.1.2。

【讨论】:

以上是关于react-native socket.io 来自节点服务器的无尽请求的主要内容,如果未能解决你的问题,请参考以下文章

Socket io客户端在react-native应用程序中不断断开和重新连接

React-Native 无法解析模块

来自 php 源的 Socket.io

来自 php 源的 Socket.io

来自互联网的本地 Socket.io 连接

Socket.IO与服务器多次连接