Отправка данных с сервера express на собственный клиент с помощью socket.io - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь отправить данные с моего express сервера на собственный клиент с использованием socket.io для реализации некоторых функций реального времени. Но я столкнулся с некоторыми проблемами, которые я не могу решить после просмотра нескольких статей / сообщений stackoverflow.

Я использую ngrok для подключения моего приложения на базе агента через expo к серверу. Другие функции приложения работают правильно, но соединение между сокетами на стороне клиента и сервера установлено неправильно.

Когда я использую IP-адрес в качестве URL ("http://192.ip.address.: 8000 ") для соединения сокетов на сервере и клиенте, я вижу, что значение socket.connected истинно на всех экранах реакции-родной, где я импортирую клиент сокета. Но сообщение не получено.

Кроме того, есть ли лучший способ совместно использовать один и тот же экземпляр / соединение сокета для нескольких файлов на стороне сервера / клиента?

На стороне сервера код

Настройка socket.io в индексе. js

const app = express();
const expressRouter = require("./routes");
const socketio = require("socket.io");

app.set("view engine", "ejs");
app.set("views", "./views");
app.use(express.urlencoded());
app.use("/", expressRouter);

const server = app.listen(port, function (err) {
  if (err) {
    console.log(`Failed to run the server: ${err}`);
    return;
  }
  console.log(`Server running successfully on port: ${port}`);
});

const io = socketio(server);
app.set("io", io);

Отправка сообщения через один из контроллеров (/controllers/homeController.js) -> / home

module.exports.getHome = function (request, response) {
  let io = request.app.get("io");

  io.on("connection", function (socket) {
    console.log("connected io");
    io.sockets.emit("some-channel", "some other new message text");
  });
  return response.render("dashboard");
};

React-Native Code

Настройка сокет-клиента для использования на всех экранах (src / utils / socket. js)

import Constants from "./Constants";
import io from "socket.io-client";
export const socket = io(Constants.getNgrokUrl());

Использование клиента socket.io на другом экране (src /screen / homeScreen. js)

import { socket } from "../utils/socket";

const HomeScreen = ({ navigation }) => {
    const [socketData, setSocketData] = useState(""); 
    console.log("socket connection", socket.connected, "on home screen");

    socket.on("some-channel", function (data) {
      console.log("new data received", data);
      setSocketData(data);
    });

  return (
    <View>
       <Text>{socketData}</Text>
   </View>
);
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...