В настоящее время мне нужно кодировать сервер nodejs, чтобы обеспечить положение в реальном времени для всех пользователей, имеющих токен.Поэтому я использую socket.io и экспресс.На данный момент я отправляю сообщения только при нажатии кнопки, прежде чем начать отправку позиций в формате JSON.
Клиент отправляет событие с сообщением, а сервер извлекает его перед отправкой нового сообщения клиентам с таким жетокен в качестве первого клиента.
Моя проблема заключается в следующем: я могу отправить сообщение от клиента, но сервер не получает соответствующее событие и, следовательно, не может отправить свой ответ.Есть ли у вас какие-либо объяснения?
Сервер:
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);
var port = 8080;
var tokenArray = [];
app.get('/suivi/:token', function(req, res) {
res.sendFile(__dirname + "/src/suiveur.html");
});
app.get("/createChannel/:token", function(req, res) {
console.log(req.params.token);
var newNamespace = io.of("/" + req.params.token);
tokenArray.push(newNamespace);
newNamespace.on('connection', function(socket) {
socket.on('room', function(room) {
socket.join(room.substring(1, room.length));
});
});
newNamespace.on('afficheTest', function(msg) {
console.log(msg);
newNamespace.to("/" + req.params.token).emit('afficheTest', "Salut les amis");
});
res.send("OK");
});
//Création d'une route dynamique pour servir le css
app.get("/css/:nomFichierCss", function(req, res) {
res.sendFile(__dirname + "/css/" + req.params.nomFichierCss);
});
//Création d'une route dynamique pour servir les scripts
app.get("/script/:nomScript", function(req, res) {
res.sendFile(__dirname + "/script/" + req.params.nomScript);
});
http.listen(port, function(){
console.log('listening on *:' + port);
});
Сценарий на стороне клиента:
window.addEventListener("load", function() {
initMap();
$(function() {
localStorage.debug = '*';
//On récupère le token
var room = window.location.href.substring(window.location.href.lastIndexOf("/"), window.location.href.length);
//On se connecte au bon salon
var socket = io.connect(room);
//On détecte un évènement indiquant que la personne a bougé
socket.on("newPositionAppears", (tableau) => {
if(tableau != null) {
tableau.forEach((polyLine) => {
//On part du principe qu'il s'agit d'un tableau de polyLine
map.entities.push(polyLine);
})
}
});
$('#affichons').on("click", function() {
alert("Click");
socket.emit("afficheTest", "Salut bb");
});
socket.on("afficheTest", function(msg) {
console.log("Affiche Test : ");
alert(msg)
});
socket.on("connect", function() {
socket.emit("room", room);
});
});
});