Моя текущая проблема заключается в том, что есть два браузера (два пользователя). Как только они оба подключены, они могут выполнить определенное событие сокета, которое является запросом друзей, но не одновременно. Всегда нужно обновлять одну из страниц пользователя.Сокет io не работает в обе стороны?
Иллюстративно
Когда пользователь нажимает на эту кнопку
панели Navbar glyphicon будет увеличиваться на 1
Serverside событие
io.on('connection', function(socket){
// Everytime user is connected, I will do some Database operation to store the socketId, it will look something like this
user.socketId = socket.id; // For simplicity.
console.log(socket.request.user.username); // is using passport-socket.io library
socket.on('friendsRequest', function(data) {
// Got these two datas from input hidden on html by using Jquery
var socketId = data.socketId;
var userId = data.userId;
socket.to(socketId).emit('friendsRequest', socket.request.user);
console.log("Successful" + " from " + socket.request.user.username);
});
Странная вещь, на ServerSide она всегда показывает console.log("Successful" + " from " + socket.request.user.username);
смысл, если нажать на кнопку браузера Оба пользователя он будет показывать правильно
"Successful from UserA"
"Successful from UserB"
Но проблема на стороне клиента, целевой HTML никогда не изменял , это всегда один из glyphicon браузера в NavBar будет увеличиваться
Вот код на стороне клиента
// This event will send the targeted data like socketId and userId back to the server
$(document).on('click', "#addFriend", function(e){
e.preventDefault();
var userId = $('#userId').val();
var socketId = $('#socketId').val();
socket.emit('friendsRequest', {
userId: userId,
socketId: socketId
});
});
// Once the server has done doing his job, this event will listen.
socket.on('friendsRequest', function(data) {
var totalRequests = parseInt($('#totalRequests').html());
console.log(totalRequests);
totalRequests += 1;
$('#totalRequests').html(totalRequests);
$('#friendsRequested').append('<li>' + data + '</li>');
});
Основная проблема на стороне клиента socket.on('friendsRequest');
Он работает только один из браузеров, но не как в то же самое время, когда я запустил событие friendsRequest
Нужен человек с опытом Socket.io, чтобы объяснить мне почему это не работает в обоих направлениях. Что касается моей логики, то она должна работать.
HTML
<input type="hidden" name="socketId" id="socketId" value="ValueOftheSocketId" />
<button type="submit" id="addFriend" class="btn btn-default">Add Friend</button>
Я уже реализован socket.on («разрыв»), и я сделал сохранить socket.id в пользовательской базы данных для последующего использования. Но когда я обновляю, это просто не будет работать в обоих направлениях. –
Я считаю, что это проблема с повторным подключением? –
Я думаю, что это нехорошая идея, сохранить socket.id в db, когда вы обновите сокет, получите новый идентификатор –