Итак, в настоящее время я пытаюсь достичь этого, когда пользователь нажимает кнопку, он добавляет +1 к счетчику, а затем, когда другой пользователь подключается, он начинает отсчет не с 0, а с 1.

Но сейчас происходит то, что когда я присоединился к первому пользователю, я щелкнул 10 раз, а затем я присоединяюсь к другому пользователю и нажимаю кнопку, он снова начинается с 0, а не с 10. Другими словами, счетчик подсчитывает клики отдельных пользователей, но не общее количество пользователей.

Это мой server.js:

var user = 0;
var totalClicksFromOneUser = 0;
io.on('connection', (socket) => {

    socket.on('buttonClicked', (data) => {
        totalClicksFromOneUser = data.totalClicks;
        io.emit('clicksCountFromUsers', {
            clicks: totalClicksFromOneUser
        });
    });

    io.emit('totalClickedTimes', {
        clicks: totalClicksFromOneUser
    });

    io.emit('totalUsers', {
        usersCount: user = user + 1
    });

    socket.on('disconnect', () => {
        io.emit('userdc', {
            usersCount: user = user - 1
        });
    });
});

Index.html:

    <!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>

    <h1 id="usersCount"></h1>
    <button id="clicker">CLICK ME</button>
    <p id="totalClicks"></p>

    <script
    src="https://code.jquery.com/jquery-3.3.1.min.js"
    integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8="
    crossorigin="anonymous"></script>

    <script src="/socket.io/socket.io.js"></script>
    <script>

        var socket = io();
        var clicks = 0;

        socket.on('connect', function(data){
            console.log("You're connected");
        });

        socket.on('totalUsers', function(data){
            $('#usersCount').text(data.usersCount);
        });

        socket.on('userdc', function(data){
            $('#usersCount').text(data.usersCount);
        });

        $('#clicker').on('click', function(){
            socket.emit('buttonClicked', {
                totalClicks: clicks = clicks + 1
            });
        });

        socket.on('clicksCountFromUsers', function(data){
            $('#totalClicks').text(data.clicks);
        });

        socket.on('totalClickedTimes', function(data){
            $('#totalClicks').text(data.clicks);
        });

        socket.on('disconnect', function(){
            console.log("User disconnected");
        });

    </script>
</body>
</html>
0
labas GamePage visogero 23 Сен 2018 в 14:37

1 ответ

Лучший ответ

Здесь вы устанавливаете только начальное значение текста на экране

socket.on('clicksCountFromUsers', function(data){
    $('#totalClicks').text(data.clicks);
});

Вы никоим образом не инициализируете переменную clicks, поэтому она останется нулевой. Измените это на

socket.on('clicksCountFromUsers', function(data){
    $('#totalClicks').text(data.clicks);
    clicks = data.clicks;
});

И сохранит полученное состояние.

Этот код может по-прежнему сбрасываться в любое состояние, которое сделал последний кликер, поскольку вы отправляете конечное значение на сервер и сохраняете его, а не вычисляете и сохраняете значение на сервере.

0
Sami Kuhmonen 23 Сен 2018 в 11:44