2017-04-17 48 views
0

我正在使用nodeJS和套接字io構建一個應用程序。 我有我做了以下一個server.js文件:是否有可能在服務器端打開兩個套接字

var app = express(); 
 
var http = require('http').Server(app); 
 
var io = require('socket.io')(http); 
 
io.on('connection', function(socket){ 
 
console.log("a user is connected"); 
 
});

而且我還有一個文件「api.js」中,我有以下功能:

filter.watch(function(error, result){ 
 
    if (!error){ 
 
    var newblock = new Block(web3.eth.getBlock(result)); 
 

 
    newblock.save(function (err) { 
 
        if (err) return handleError(err); 
 
        // saved! 
 
    }) 
 
    } 
 
});

我試着發送對象 「newblock」 (這是不斷變化的)從文件api.js到socket.io的server.js。我嘗試在api.js中執行「socket.emit('fromApi_toserver',newblock)」,但它不工作......有沒有人有任何想法?

+0

爲什麼你需要打開不同的套接字?你可以在你的apijs文件中使用相同的'io'實例並執行'io.emit('fromApi_toserver','hello world')'並在你的服務器js文件中偵聽'io.on('fromApi_toserver',function(msg ){.....})' –

回答

1

這裏似乎有幾個問題。

首先,如果你想發送給所有連接的客戶端,那麼你會使用io.emit(),而不是socket.emit()

其次,由於io在您的app.js文件中定義,如果您要在api.js文件中訪問該文件,則需要專門將其用於該文件。有很多方法可以做到這一點,但最常見的方法是在加載api.js模塊時使用模塊構造函數將其傳遞給該文件。這裏有一個辦法做到這一點:

app.js

var app = express(); 
var http = require('http').Server(app); 
var io = require('socket.io')(http); 
io.on('connection', function(socket){ 
    console.log("a user is connected"); 
}); 

// pass io variable to app.js when loaded 
require('api.js')(io); 

api.js

// define module constructor 
let io; 
modules.exports = function(socketio) { 
    // save io instance for later use 
    io = socketio; 
} 

filter.watch(function(error, result){ 
    if (!error){ 
    var newblock = new Block(web3.eth.getBlock(result)); 

    newblock.save(function (err) { 
     if (err) return handleError(err); 
     // send JSON stringified version of newblock to all connected clients 
     io.emit(newblock); 
    }); 
    } 
}); 

第三,你不能發送現場的對象是客戶。在發送到客戶端之前,socket.io的數據被序列化爲JSON字符串,然後客戶端socket.io將會將JSON反序列化爲對象。但是,它只是客戶端上的一個普通對象,而不是任何特定的對象類型。如果您需要將數據作爲特定對象類型(例如客戶端Block對象),那麼您必須獲取您收到的數據並使用它創建您自己的新客戶端Block對象。

第四,你的問題問了關於第二個套接字,但你不需要另一個套接字。您可以使用io實例向io.emit()發送給所有當前連接的客戶端。

+0

@Sarah - 這是否回答您的問題? – jfriend00

相關問題