使用node.js将web和移动api与套接字连接
我是节点和套接字编程新手 我的项目要求是这样的 一个服务器,其中包含一组问题和一组活动。活动包含问题。管理员将启动或停止活动 一旦活动开始,Web应用程序的前端将仅显示问题,移动应用程序将显示问题的答案,并且问题将在Web和移动应用程序中每隔X秒自动重新加载 我尝试了websocket和socket.io这对于web应用程序的需求来说非常有效。但我不知道移动API是什么 下面是socket.io的代码 server.js使用node.js将web和移动api与套接字连接,node.js,api,sockets,websocket,socket.io,Node.js,Api,Sockets,Websocket,Socket.io,我是节点和套接字编程新手 我的项目要求是这样的 一个服务器,其中包含一组问题和一组活动。活动包含问题。管理员将启动或停止活动 一旦活动开始,Web应用程序的前端将仅显示问题,移动应用程序将显示问题的答案,并且问题将在Web和移动应用程序中每隔X秒自动重新加载 我尝试了websocket和socket.io这对于web应用程序的需求来说非常有效。但我不知道移动API是什么 下面是socket.io的代码 server.js var mysql = require('mysql'); // Let’
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;
});
var mysql=require('mysql');
//让我们让node/socketio监听端口3000
var io=require('socket.io')。侦听(3000);
//定义我们的数据库凭证
var db=mysql.createConnection({
主机:“localhost”,
用户:'根',
密码:'**',
数据库:'数据库名称'
});
//记录连接到数据库的所有错误
数据库连接(功能(错误){
如果(错误)
控制台日志(err);
});
//定义/初始化我们的全局变量
var问题=[];
var总问题=0;
var isInitNotes=false;
var计数=0;
var-sql=“”;
//每个连接调用一次,创建新连接
io.sockets.on('connection',函数(socket){
console.log((new Date())+'Connection from origin'+socket.handshake.headers.origin);
//io.sockets.emit('已连接的用户',socketCount)
socket.on('disconnect',function(){
console.log((new Date())+'Disconnected from origin'+socket.handshake.headers.origin);
});
db.query('选择COUNT(vQuestion)作为来自问题的总问题')
.on('result',函数(数据){
//将结果推送到问题数组中
总问题=数据。总问题;
});
//从数据库中选择问题
var questionInterval=setInterval(函数(){
//检查问题的条件是否结束
如果(计数<总问题){
sql='从问题限制中选择vQuestion'+计数+',1';
console.log(sql);
数据库查询(sql)
.on('result',函数(数据){
//将结果推送到问题数组中
problems.pop();
问题。推送(数据);
})
.on('end',函数(){
//仅在查询完成后发出问题
发出('get questions',questions');
});
计数++;
}否则{
clearInterval(问题间隔);
}
}, 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>
$(文档).ready(函数(){
//连接到我们的节点/websockets服务器
var socket=io.connect('http://localhost:3000');
//初始问题集,循环并添加到列表中
socket.on('get questions',函数(数据){
var html=''
对于(变量i=0;i'+数据[i].vQuestion+''
}
$(“#问题”).append(html)
})
})
服务器命令
node server.js
2016年10月21日星期五10:30:35 GMT+0530(IST)从原点连接
网络浏览器(网络应用程序)
/index.html
每5秒显示一个问题
在我的例子中,只有一个web应用程序会在那里,但会有多个移动用户同时连接