我一直在尝试构建(我自己)一个实时通知系统。
过去两天我搜索了很多,我相信最好和最简单的解决方案是使用node.js
和socket.io
来开发它。但我不知道这些都没有。
node.js
和socket.io
是一个很好的做法吗?
规格
是否有任何简单的示例或教程才能开始? 如果有人可以发布任何例子,那将对我很有帮助..
答案 0 :(得分:2)
对于这样的任务,我建议您使用MongoDB和Ajax。它更简单,您只需在客户端(html)添加ajax代码并在服务器端处理请求。
简单示例:
普通用户发送消息
html
档案
$.ajax({
method: "POST",
url: "http://myUrl.com/myPath",
data: { message: "Hello this is a message" },
contentType: "application/json",
success: function(data){
//handle success
},
error: function(err){
//error handler
}
})
服务器端
app.post('/myUrl', function(req, res){
if(req.body){
//message handlers here
}
Users.find({type: 'admin'}, function(err, users){
var message = req.body.message;
for(var i = 0; i < users.length, i++){
//make sure you have the type as adminPending from the schema in MongoDB
message.save(//save this message to the database); //save this message to the database as 'adminPendingType'
}
})
})
来到管理员,让他们知道他们收到了一条消息,你需要每秒进行一次ajax调用,这就是facebook / twitter处理大多数事情的方式。因此,如果他们有一个新的收件箱,基本上一次又一次地询问服务器。
Admin html
function messageGetter(){
$.ajax({
method: "POST",
url: "http://myUrl.com/didIreceiveAmessage",
data: { message: "Hello this is a message" },
contentType: "application/json",
success: function(data){
//success handler with data object
if(data['exists']== "true"){
//add your data.message to the html page, so it will be seen by the user
}
},
error: function(err){
//error handler
}
})
}
setInterval(messageGetter, 1000); //check it each second
服务器端
app.post('/myUrl', function(req, res){
if(req.body){
//message handlers here
}
Message.find({type: 'adminPending'}, function(err, messages){
//find the admin info from cookies here
if(messages.length == 0){
console.log("No messages pending");
return false; //exit the request
}else{
var admin = req.session.admin.id; //admin user
//handle stuff with admin
messages['exists'] == true;
res.send(messages);
//change the type of message from adminPending to adminSeen
return false; //exit the message
}
})
})
这只是一个简单的例子,介绍如何使用带有Node的ajax和MongoDB。当然编码会更长,因为你必须处理更改消息类型并保存它们。