Я пытаюсь реализовать веб-сокеты. Ему удается установить соединение и печатать Backend, connected!
и Frontend, connected!
, но когда я набираю текст на вводе и нажимаю отправить, он просто печатает Frontend, connected!
еще несколько раз, и ничего не происходит. Что я здесь не так делаю?
Вот что у меня есть:
// server.js
const express = require("express");
const app = express();
app.use("/api/messages", require("./routes/api/messages"));
const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Listening on port ${PORT}`));
// routes/api/messages.js
const express = require("express");
const router = express.Router();
const server = require("http").createServer();
const io = require("socket.io")(server, {
path: "/socket",
serveClient: false,
pingInterval: 10000,
pingTimeout: 5000,
cookie: false
});
io.on("connection", () => {
console.log("Backend, connected!");
});
io.on("msg", function(msg) {
console.log("entered!"); // <--- never prints!
console.log("message: " + msg);
});
server.listen(5001);
router.post(...)
router.get(...)
module.exports = router;
И на моем внешнем интерфейсе React, на одном из моих экранов в React Navigation:
const Conversation = ({
navigation,
auth: { user },
sendMessage
}) => {
const [replyText, setReplyText] = useState("");
const socket = io("http://192.168.112.110:5001", {
path: "/socket",
transports: ["websocket"],
jsonp: false
});
useEffect(() => {
socket.connect();
socket.on("connect", () => {
console.log("Frontend, connected!");
});
socket.on("works?", () => {
console.log("omg");
});
socket.on("connect_error", err => {
console.log("error", err);
});
}, []);
const handleSendReply = () => {
if (validateLength(replyText) === 0) {
setReplyTooShort(true);
return;
}
sendMessage(
replyText,
user.username
);
console.log("replyText", replyText); // prints
socket.emit("msg", replyText);
setReplyText("");
};
return <View>
<Input
label="reply"
value={replyText}
onChangeText={e => setReplyText(e)}
/>
<View style={{ alignItems: "flex-end" }}>
<Icon
name="md-send"
type="ionicon"
iconStyle={{ paddingLeft: 20, paddingRight: 20, paddingTop: 10 }}
onPress={() => handleSendReply()}
/>
</View>
</View>
}
"socket.io": "^ 2.3.0" // server
"socket.io-client": "^ 2.3.0" // client
Редактировать:
(Желтое предупреждение следует игнорировать согласно этого комментария )