Я пытаюсь отправить данные с моего 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>
);
};