1

私はしばらくこの問題に固執してきましたが、答えは本当に基本的なものかもしれませんが、問題が何であるかを理解できません。AFAIU関数を実行しますが、コールバックをトリガーしません。その理由はわかりません。

私のスクリプトは、tcp ソケットに接続するデバイス (raspberry pi) を持つ tcp サーバーと、sailsjs アプリの websocket に接続するクライアントの両方を持つことを目指しています。

私はこの両方を次のコードで実行することに成功しました。問題は、ソケットの外に出ようとするとすべて正常に動作しますが、内部にある場合は io.socket オブジェクトが山積みになっているだけです。 get リクエストを requestQueue に入れます。

{ useCORSRouteToGetCookie: true,
  url: 'http://localhost:1337',
  multiplex: undefined,
  transports: [ 'polling', 'websocket' ],
  eventQueue: { 'sails:parseError': [ [Function] ] },
  query:'__sails_io_sdk_version=0.11.0&__sails_io_sdk_platform=node&__sails_io_sdk_language=javascript',
   _raw:
    { socket:
      { options: [Object],
        connected: true,
        open: true,
        connecting: false,
        reconnecting: false,
        namespaces: [Object],
        buffer: [],
        doBuffer: false,
        sessionid: '0xAlU_CarIOPQAGUGKQW',
        closeTimeout: 60000,
        heartbeatTimeout: 60000,
        origTransports: [Object],
        transports: [Object],
        heartbeatTimeoutTimer: [Object],
        transport: [Object],
        connectTimeoutTimer: [Object],
        '$events': {} },
     name: '',
     flags: {},
     json: { namespace: [Circular], name: 'json' },
     ackPackets: 0,
     acks: {},
     '$events':
      { 'sails:parseError': [Function],
        connect: [Object],
        disconnect: [Function],
        reconnecting: [Function],
        reconnect: [Function],
        error: [Function: failedToConnect],
        undefined: undefined } },
  requestQueue:
   [ { method: 'get', headers: {}, data: {}, url: '/', cb: [Function] },
     { method: 'get', headers: {}, data: {}, url: '/', cb: [Function] } ] }

コードは次のとおりです。

//library to connect to sailsjs websockets
var socketIOClient = require('socket.io-client');
var sailsIOClient = require('sails.io.js');

//library to do the tcp server
var net = require('net');


// Instantiate the socket client (`io`)
// (for now, you must explicitly pass in the socket.io client when using this library from Node.js)
var io = sailsIOClient(socketIOClient);

// Set some options:
// (you have to specify the host and port of the Sails backend when using this library from Node.js)
io.sails.url = 'http://localhost:1337';



var server = net.createServer(function(tcpSocket) { //'connection' listener


    //socket was sucessfully connected
    console.log('client connected');

    //notify on deconnection
    tcpSocket.on('end', function() {
        console.log('client disconnected');
    });

 // Handle incoming messages from clients.
    tcpSocket.on('data', function (data) {


        console.log(data.toString('utf8', 0, data.length));

        //if data is PING respond PONG
        if(data.toString('utf8', 0, 4)=='PING'){
            console.log('I was pinged');
            tcpSocket.write('PONG\r\n'); 
        }

        console.log(io.socket);//debugging purpose
        //trigger a socket call on the sails app
        io.socket.get('/', function (body, JWR) {
            //display the result
            console.log('Sails responded with: ', body);
            console.log('with headers: ', JWR.headers);
            console.log('and with status code: ', JWR.statusCode);

        });
    });

});


server.listen(8124, function() { //'listening' listener
    console.log('server bound');
});
4

2 に答える 2

0

私は解決策を見つけました。sails.io.jsを取り除き、プレーンなsocket.ioを使用しました。意図したとおりに機能するようになりましたが、なぜsails.io.jsになかったのかを自由に説明してください

//library to connect to sailsjs websockets
    var socketIOClient = require('socket.io-client');
    //var sailsIOClient = require('sails.io.js');

    //library to do the tcp server
    var net = require('net');


            var socket=socketIOClient.connect('http://localhost:1337', {
'force new connection': true
});

    var server = net.createServer(function(tcpSocket) { //'connection' listener

        //socket was sucessfully connected
        console.log('client connected');

        //notify on deconnection
        tcpSocket.on('end', function() {
            console.log('client disconnected');
        });

     // Handle incoming messages from clients.
        tcpSocket.on('data', function (data) {

            console.log(data.toString('utf8', 0, data.length));

            console.log(data.toString('utf8', 0, data.length));

            //if data is PING respond PONG
            if(data.toString('utf8', 0, 4)=='PING'){
                console.log('I was pinged');
                tcpSocket.write('PONG\r\n'); 
            }

            if(data.toString('utf8', 0, 4)=='test'){

                socket.emit('test',{message : 'test'});

             //io.socket.disconnect();
            }


        });

    });
于 2015-02-04T13:55:38.547 に答える
0

ソケットが自動接続されていないようです。手動で接続してみてください:

// Instantiate the socket client (`io`)
// (for now, you must explicitly pass in the socket.io client when using this library from Node.js)
var io = sailsIOClient(socketIOClient);

// Set some options:
// (you have to specify the host and port of the Sails backend when using this library from Node.js)
io.sails.url = 'http://localhost:1337';

var socket = io.sails.connect();

socket.on('connect', function() {

   ... connect TCP server and continue ...

});
于 2015-02-03T16:49:10.393 に答える