下午,花了点时间写了简单的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,没有把握。 各路大神帮忙看看。