2013-07-01 49 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> 
相关问题