お世話になります。 松尾と申します。

node.jsにて下記の様な仕組みを作成しております。

現在、バッチプログラム(vs.net C#)にてDB監視を行い、結果をクライアントに通知する仕組みを作成しています。
監視バッチ→node.js→ios/android
として、node.js→ios/androidはリアルタイム通知の為、soket-ioを使用しています。(※ちなみに監視バッチ→node.jsはwebsocketが使用できない為、URLにてデータを渡しています。http://xxx?1=a&2=B)
node.js内でアクセスされたURL引数をJSONに変換してクライアントへsocket-ioにて一斉配信しています。

とりあえず動いてはいるのですが、URLで受け取ったデータをsocket-ioにて配信する際、一度、自分自身のsocket-ioにconnectしてsocketにセットしています。
connectが非同期となる為setTimeoutを利用している為、サーバの負荷次第ではconnect処理(serversocket1)を配信処理(serversocket2)が追い越してしまうと考えています。

何か良い制御方法は無いのでしょうか?

よろしくお願いします。

環境
windows2003 sp2
node v0.8.17


メイン部分のソースです。
-------------------------------------------------------------------------------------------
var http = require("http");
var url = require("url");

var socketval = 0;

  
function start(route,handle){
    var query = "";
    function onRequest(request,response){
        var queryData = url.parse(request.url, true).query;
        var url_parts = url.parse(request.url,true);
        query = url.parse(request.url, true).query;
        var pathname = url.parse(request.url).pathname;
        if(socketval===0){
            setTimeout(function(){serversocket1("Appname",query)},1);
        };

            setTimeout(function(){serversocket2("Appname",query)},1000);
        request.setEncoding("utf8");
            
        request.addListener("end",function(){
            route(handle,pathname,response);   
        });
    }
    
    var server = http.createServer(onRequest).listen(8080);
    //console.log("Serevr has sterted.");
    
    // socket.io
    var io = require('socket.io').listen(server);


    var archiveMessages = {};
    var channels = ['Appname'];
    
    var appname = io.of('/appname');
    var socket = "";
    var socket_c = "";
    appname.on('connection', function(socketin){
        console.log('connected: %s', socket.id);
        socket = socketin;
    
        // push available channel list
        socket.emit('available_channel', channels);
    
        socket.on('join', function(value){
            console.log('%s joined channel: %s', socket.id, 
value.channelId);
    
            socket.join(value.channelId);
        });
        socket.on('join_c', function(value){
            console.log('clientjoin %s joined channel: %s', socket.id, 
value.channelId);
    
            socket.join(value.channelId);
            socket_c = socket;
            socketval=1;
        });
    
        socket.on('post', function(message){
            socket.get('channel_id', function(err, channelId){
                console.log(' %s says<%s channel>: %s', socket.id, 
channelId, message);
    
            });
        });
    
        socket.on('disconnect', function(){
            console.log('%s disconnected', socket.id);
            socket.get('channel_id', function(channelId){
                socket.leave(channelId);
            });
        });
        
    });

    var io_c = require('socket.io').client;
    var appname_c = "";
    function serversocket1(channelId,data){
        var appname_c_1 = io_c.connect('http://localhost:8080');
        appname_c = appname_c_1.of('/appname');

        appname_c.emit('join_c', {
          channelId: 'Appname'
        });
        
    }
    function serversocket2(channelId,data){
        socket_c.set('channel_id', channelId, function(){
          socket_c.emit('posted', data);
          socket_c.broadcast.to(channelId).emit('user:message', data);
        });
    }
};

exports.start = start;
------------------------------------------------------------------------------------------------



-- 



メールによる返信