Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all articles
Browse latest Browse all 14821

一个http 到websocket 的推送服务器雏形代码,有些问题请大神指教

$
0
0

下午,花了点时间写了简单的http到websocket 服务的雏形,觉得有些问题,我把代码贴出来 var bodyParser = require(‘body-parser’); var express = require(‘express’), app = express(), server = require(‘http’).createServer(app), io = require(‘socket.io’).listen(server); //引入socket.io模块并绑定到服务器 app.use(’/’, express.static(__dirname + ‘/www’)); app.use(bodyParser.json());

app.get(’/’, function(req, res){ res.send(‘laugh’); })

app.post(’/info’, function(req, res){ //链接id var id = req.body.id; //存放信息 var info = req.body.info; //保存消息记录的数据对象 message[id] = info; res.send(‘laugh’); })

//消息记录 var message = []; //保存socket记录表 var sockets = []; //链接ID var id = 0;

server.listen(8000);

//socket部分 io.on(‘connection’, function(socket) {

//接收并处理客户端发送的foo事件
socket.on('login', function(data) {
    //保存链接ID
    sockets[id] = socket;
    socket.id = id;
    id++;
    socket.emit('reg', { 'id': id });
    console.log("login name:" + data.name + ", id:" + id);
});

//计时器,2秒一次
var tweets = setInterval(function () {
    //如果有消息,则发送
    if (message[socket.id] != null){
        socket.volatile.emit('info', message[i]);
    };
}, 2000);

socket.on('disconnect', function () {
    clearInterval(tweets);
});

});

//2秒触发事件发送, 计数器 var ms = 2000; var timer = setInterval(function(){ for(var i =0 ; i < message.length ;i++){ //搜索数据,存在发送 if(message[i] != null ){ sockets[i].emit(‘info’, message.i); }; }; }, ms); ---------------------------------------------------- 第一个问题,这个思路是否可以,通过websocket 的login 返回一个登录id,保存,然后http 收到post信息,就推送到这个登录的链接的端口。 第二个问题,我写了2个计时器,检测是否收到http方面的消息,然后推送, 第一个在监听事件,链接时候产生,断开销毁,第二个永久保留全局检测,不知道那个好,尤其是socket 是否可以增加对象id,没有把握。 各路大神帮忙看看。


Viewing all articles
Browse latest Browse all 14821

Trending Articles