Подключите веб-и мобильный api с помощью сокета node.js

#node.js #api #sockets #websocket #socket.io

#node.js #API #сокеты #websocket #socket.io

Вопрос:

Я новичок в программировании узлов и сокетов.

В моем проекте требования такие,

Один сервер, на котором размещается набор вопросов и набор кампаний. кампании содержат вопросы. И администратор запустит или остановит кампанию.

После запуска кампании во внешнем интерфейсе веб-приложения будут отображаться только вопросы, а в мобильном приложении — ответ на вопрос, и вопрос будет автоматически перезагружаться через каждые X секунд как в веб-, так и в мобильном приложении.

Я попробовал веб-сокет и сокет.ввод-вывод это нормально работает для требований веб-приложения. Но я не знаю, что для мобильного API.

Ниже приведен код для socket.io.

server.js

 var mysql = require('mysql');
// Let’s make node/socketio listen on port 3000
var io = require('socket.io').listen(3000);
// Define our db credentials
var db = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: '****',
    database: 'database_name'
});
// Log any errors connected to the db
db.connect(function (err) {
    if (err)
        console.log(err);
});
// Define/initialize our global vars
var questions = [];
var total_question = 0;
var isInitNotes = false;
var count = 0;
var sql = "";

// call once per connection, create new connection
io.sockets.on('connection', function (socket) {
    console.log((new Date())   ' Connection from origin '   socket.handshake.headers.origin);
    //io.sockets.emit('users connected', socketCount)
    socket.on('disconnect', function () {
        console.log((new Date())   ' Disconnected from origin '   socket.handshake.headers.origin);
    });

    db.query('SELECT COUNT(vQuestion) as total_question FROM questions')
            .on('result', function (data) {
                // Push results onto the questions array
                total_question = data.total_question;
            });

    // select questions from DB
    var questionInterval = setInterval(function () {
        // check condition for question is over or not
        if (count < total_question) {
            sql = 'SELECT vQuestion FROM questions LIMIT '   count   ',1';
            console.log(sql);
            db.query(sql)
                    .on('result', function (data) {
                        // Push results onto the questions array
                        questions.pop();
                        questions.push(data);
                    })
                    .on('end', function () {
                        // Only emit questions after query has been completed
                        socket.emit('get questions', questions);
                    });
            count  ;
        } else {
            clearInterval(questionInterval);
        }
    }, 5000);
    isInitNotes = true;
});
  

Index.html

 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="http://localhost:3000/socket.io/socket.io.js"></script>
<script>
$(document).ready(function(){
    // Connect to our node/websockets server
    var socket = io.connect('http://localhost:3000');

    // Initial set of questions, loop through and add to list
    socket.on('get questions', function(data){
        var html = ''
        for (var i = 0; i < data.length; i  ){
            // We store html as a var then add to DOM after for efficiency
            html  = '<li>'   data[i].vQuestion   '</li>'
        }
        $('#questions').append(html)
    })
})
</script>
<ul id="questions"></ul>
<div id="usersConnected"></div>
  

Команды для сервера

узел server.js

Пт, 21 октября 2016 г., 10:30:35 GMT 0530 (IST) Подключение от источникаhttp://localhost

Веб-браузер (веб-приложение)

http://localhost/index.html

выводите вопрос каждые 5 секунд.

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