2013-07-01 159 views

回答

2

我檢出了Socket.IO,但最終使用了Faye。 Faye可能比你想要的功能多一點,但它的設置和使用非常簡單。我發現它比Socket.IO更直觀。並不是說Socket.IO看起來很難,但是Faye看起來更容易。

這裏是網站:

http://faye.jcoglan.com/

有一個谷歌用戶羣也和筆者已經回答了我的夫妻查詢。

你所需要的是下面的代碼:

節點側:

var faye = require('faye'); 
var faye_server = new faye.NodeAdapter({mount: '/faye', timeout: 120}); 

console.log('Firing up faye server. . . '); 
faye_server.listen(8089); 

//send message out every 1 second 
setInterval(function() 
{ 
    var currentTime_secsSinceEpoch = new Date().getTime()/1000; 

    faye_server.getClient().publish('/heartbeat', 
    { 
     pageName: 'app.js', 
     timeMessageSent_secs_since_epoch: currentTime_secsSinceEpoch, 
     iFrame1CycleCount: iFrame1CycleCount 

    }); 
}, 1000); 

瀏覽器端:

<script type='text/javascript'> 
//create faye client 
var faye_client = new Faye.Client('http://127.0.0.1:8089/faye'); 

var faye_message_subscription = faye_client.subscribe('/heartbeat', function(message) 
{ 
    //record the time message was received 
    var receiveTime_secSinceEpoch = new Date().getTime()/1000; 

    console.log("Got heartbeat at " + receiveTime_secsSinceEpoch + "with a delay of " + 
     receiveTime_secsSinceEpoch - message.currentTime_secsSinceEpoch + " secs"); 
    //Do something else important here!! 
} 
</script> 

這就是它!現在,每當您的服務器發送「心跳」消息時,您的網頁都會調用我們指定的功能,並向控制檯吐出一條消息。死簡單。你可能想使用很多其他很酷的功能,但這主要是你想要我想的。

您可以非常輕鬆地將Faye附加到節點中的快速服務器,這使得它可以很好地與Web服務器一起工作。

+0

我可能會用Faye。 – Phil

0

Socket.IO將允許您建立node.js和前端JS之間的持久通信。

您可以發出消息並訂閱來自雙方的任何其他消息。由於它是雙向通信,你不需要任何請求/響應的東西,只是從任何一方發出,它會通過回調在另一端緩存。

0

您將不得不使用Socket.IO來形成網絡套接字連接,該連接允許在完成一次初始連接後將數據從任何一方發送到另一端。如果用戶的瀏覽器中不允許使用web-socket,則Socket.IO會使用許多回退方法。

因此,您可以在客戶端代碼中添加一個事件綁定器,它將響應從nodejs服務器端發送的任何數據,因此您可以從服務器本身執行客戶端功能。

但是,如果您尋找的東西,你在客戶端定義一個函數,你可以直接從nodejs調用它,比你錯了。儘管它們都是javascript,但它們在執行方面完全不同。 NodeJs是在服務器端的JavaScript,而不是一次。 但仍然如上所述,您可以使用Socket.IO和事件綁定執行客戶端函數。

2

使用socket.io從客戶端偵聽的服務器(本例中爲「for_client」)發出事件併爲客戶端事件(本例中爲「for_server」)設置偵聽器。可以有任意數量的事件,並且可以有一個可用於調用方法的回調函數。

var io = require('socket.io').listen(80); 

io.sockets.on('connection', function (socket) { 
    socket.emit('for_client', { someData: 'if necessary' }); 
    socket.on('for_server', function(data) { 
    doSomethingServerSide(data); 
    }); 
}); 

function doSomethingServerSide(data){ console.log(data); } 

在客戶端

<script src="/socket.io/socket.io.js"></script> 
<script> 
    var socket = io.connect('http://localhost'); 
    socket.on('for_client', function (data) { 
    console.log(data); 
    socket.emit('for_server', { data: 'data' }); 
    }); 
</script> 
相關問題