0

我正在开发一个应用程序,该应用程序在数据库发生更新时将数据推送到客户端。问题在于 node.js 上的 websocket 侦听与节点不同的端口上的数据库。我之前的那个人写了一段代码,然后把它扔给了我。该节点看起来有点像这样:

var handler=http.createServer(function(req, res){
session(req, res, function(req, res, body) {
    if (!req.session || !req.session.data || !req.session.data.uid || req.session.data.uid == '' || !req.session.data.role || req.session.data.role =='') {
        var uri = url.parse(req.url).pathname;
    if(req.method == 'GET' && uri =="/attendance-node/getMonthFromReport") {
        var uri = url.parse(req.url).pathname;
        var url_parts = url.parse(req.url,true);
        processgetMonthFromReport(req, res, uri, url_parts.query);
        return;
    }
        res.writeHead(401, {"Content-Type": "text/plain"});  
        res.write("401 Unauthorized");
        res.end();
        return;
    }
    if(req.method == 'POST') {
        var uri = url.parse(req.url).pathname;
        var qs = require('querystring');
        var POSTVAR = qs.parse(body, '&', '=', {"maxKeys" : 0});
        //var POSTVAR=JSON.parse(body);
        handleRequest(req, res, uri, POSTVAR);
    }

    if (req.method=='GET') {
        var uri = url.parse(req.url).pathname;
        var url_parts = url.parse(req.url,true);
        handleRequest(req, res, uri, url_parts.query);

    }
});
}).listen(3014,"127.0.0.1");

var io = require('socket.io').listen(8077,"127.0.0.1");
sys.puts("websocket Server running on port 8077");

io.configure(function () {
io.set('transports', ['websocket', 'flashsocket', 'xhr-polling','jsonp-polling']);
io.set('log level', 0);
});
io.sockets.on('connection', function (socket) {
io.sockets.emit('init',"i am working via websocket");
});

如您所见,节点正在侦听 3014 和 8077 上的套接字。现在我应该如何为套接字上接收到的消息提供处理程序并将其转发到节点的客户端?

注意:我对 Web 开发相当陌生。所以基本上我被扔进了水里,现在我正在学习游泳。

PS 另外,套接字的客户端是什么样的?

PPS 已经处理好向套接字发送更新通知的数据库。它以 POST 请求的形式出现。提前谢谢!!

4

1 回答 1

0

听起来您也希望在客户端(浏览器?)上也有 socket.io。

我想说最好的解决方案是让 socket.io 在与您的 Web 服务器相同的端口上运行。但是,如果这是不可能的,并且您必须将数据库使用的 Web 套接字与 Web 服务器分开,您可以运行两个 socket.io 实例。

一个连接到 Web 服务器,另一个连接到数据库。

var app = require('http').createServer(handler)
  , IO = require('socket.io')
  , web_io = IO.listen(app)
  , data_io = IO.listen(8080)
  , fs = require('fs')

app.listen(80);

function handler (req, res) {
  fs.readFile(__dirname + '/index.html',
  function (err, data) {
    if (err) {
      res.writeHead(500);
      return res.end('Error loading index.html');
    }

    res.writeHead(200);
    res.end(data);
  });
}

web_io.sockets.on('connection', function (socket) {
  socket.on('some_event', function (data) {
    console.log(data);
  });
});

data_io.sockets.on('connection', function (socket) {
  socket.on('database_update', function (data) {
    // Will be sent to everyone socket listening on port 80 (browser sockets mostlikely)
    web_io.sockets.emit('database_update', data);
  });

  socket.on('disconnect', function () {
    io.sockets.emit('user disconnected');
  });
});
于 2013-06-05T16:57:00.030 回答