Как сделать привязку сервера с клиентом в случае сбоев в соединении, чтобы у клиента не оборвался процесс игры?
Здравствуйте!
Пишу мултиплеерную игру(клиент сервер). Socket.io + Node.JS.
Задался я вот таким вопросом, как более грамотно сделать привязку сервера с клиентом в случае сбоев в соединении, чтобы у клиента не оборвался процесс игры? Сначала думал делать привязку к socket.id но он при реконнекте меняется на другой. Потом подумал сделать привязку по логину клиента, но игра будет без регистрации а значит и без паролей, т.е. возможно наличие в игре игроков с одинаковыми логинами (именами). Подумав ещё, решил сделать при событии connect клиента, выдавать ему уникальный ID, но ведь при разрывах связи срабатывает reconnect и вызывается опять событие connect при котором опять же ему будет выдан сервером другой ID отличный от предыдущего и мы опять теряем клиента. Подскажите пожалуйста как обычно делают спецы что бы грамотно реализовать удержание клиента с сервером при кратковременных(до 10сек) разрывах связи и при событии reconnect?
Генерируйте свой собственный ID на сервере, например в форме GUID (тогда не нужно будет париться даже об уникальности), передавайте его на клиента и сохраняйте а cookie и в localstorage, при разрыве и восстановлении передавайте ID на сервер и восстанавливайте сессию.
Если GUID, то можно упростить, тогда его можно генерировать на клиенте 1 раз всего и сохранять сразу в localstorage и всегда предъявлять серверу один и тот же, не меняя никогда. Вероятность одинаковости практически отсутствует.
var GUID = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
var r = Math.random()*16|0, v = c === 'x' ? r : (r&0x3|0x8);
return v.toString(16);
});
Все что нужно сделать на сервере, так это получая новое соединение соотносить его по GUID с нужной сессией.