Проблема с socket.io сегодня. Когда я обновляю страницу .on («connect», {}), она никогда не срабатывает. Когда я загружаю страницу с URL-адреса, все события срабатывают, как должны. Как вы можете видеть ниже, я отключил игру. После серии клиент-серверных сообщений статус игры должен обновиться до «ready», и на сервере должен быть создан новый игрок. Когда я перезагружаю страницу (cmd + r), ни одно из событий на стороне клиента не срабатывает.socket.io "connect" event on refresh/reload wont fire
Серверная сторона распознает новое соединение «видит» новый socket.id и выдает событие «отправить комнату», но событие не получено на стороне клиента.
Я попытался установить новое соединение, но я не знаю, правильно ли я это использую.
На прошлой неделе это работало так, как я ожидал, то сегодня, даже не обновляя код, он не может заставить эти события активировать обновления страницы. Все работает, как должно, если я загрузить страницу с полной URL (http://localhost:3000
в данном случае)
index.html:
var io = io.connect('/', {'force new connection': true});
client.js
var gameStatus = 'broken';
var localPlayer;
window.onload = function() {
console.log(gameStatus); // "broken"
io.on("connect", onSocketConnected);
io.on("disconnect", onSocketDisconnect);
io.on("new player", onNewPlayer);
io.on("send room", function(data){
console.log("send room fired"); // doesn't fire on refresh
addPlayer(data);
});
}
function onSocketConnected() {
console.log("Connected to socket server "); // doesn't connect on refresh
// assign socket.sessionid as the player name
localPlayer.id = io.socket.sessionid;
io.emit("new player", {id: localPlayer.id});
console.log(localPlayer.id); // "undefined" on refresh
}
function onSocketDisconnect() {
console.log("Disconnected from socket server");
}
function addPlayer(data) {
console.log("addPlayer fired"); // doesn't fire on refresh
gameStatus = data.roomStatus;
}
server.js:
io.sockets.on('connection', function (socket) {
socket.on("disconnect", onClientDisconnect);
socket.on("new player", onNewPlayer);
});
io.sockets.on("connection", onSocketConnection);
function onSocketConnection(socket) {
console.log("New player has connected: " + socket.id);
var lastRoom = rooms.length-1; // simplified for stackoverflow
// send the playerType and roomNum to the client
io.sockets.in(lastRoom).emit('send room', { roomStatus: "ready" });
}
function onNewPlayer(client) {
console.log("new player created!"); // only on first page load
var newPlayer = new Player(client.id);
players.push(newPlayer); // add player to player array
}
function onClientDisconnect(socket) {
util.log("Player has disconnected: " + this.id);
var disRooms = io.sockets.manager.roomClients[this.id];
for (var room in disRooms) {
if (room.length > 0) { // if not the global room ''
room = room.replace(/\//g, '')
console.log('user exits: '+room);
this.broadcast.to(room).emit('player left');
}
}
}
Что происходит, когда вы вынуждаете обновить кэш? – AronVietti
Можете ли вы предложить элегантный способ принудительно обновить кеш? Я попытался добавить 'delete require.cache ['/ client.js'];' в файл server.js. Я не мог найти решение для принудительной перезагрузки на стороне клиента. Ввод 'window.location.reload (true)' в консоль перезагружает страницу, но событие «connect» по-прежнему не срабатывает и не выполняет никаких событий .on. Опять же, ввод URL-адреса в браузер работает так, как должен. Я новичок в socket.io, но я уверен, что на прошлой неделе это сработало отлично. Тестирование в пятницу построит себя по адресу: http://signal_intrusion-paper_fighter.jit.su –
Собственно, этот живой URL не работает при первом загрузке, но отлично работает на обновлениях. В принципе, противоположность моей текущей проблемы. –