#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 секунд.
В моем случае будет доступно только одно веб-приложение, но одновременно будут подключаться более одного мобильного пользователя.