2013-01-02 94 views
0

我想使用node.js和socket.io創建一個頁面。socket.io從onclick動作獲取數據,然後將數據傳遞給其他頁面以執行數據

頁面內有兩個按鈕,當我點擊其中一個按鈕時,它會更改一個定義動畫持續時間的變量(我在此省略CSS動畫代碼)。

當我在另一個網頁瀏覽器上打開同一頁面並單擊其中一個按鈕時,我希望看到兩個網頁中的更改。我不知道如何編寫socket.on('chat', function(data){???});中的代碼來使兩個頁面相互通信。

客戶端:

//socket.io codes--

<script type="text/javascript" charset="utf-8"> 

    var socket = io.connect('http://localhost:3000'); 

    socket.on('chat', function (data) 
    { 
     function change_position(data) 
      { 
      document.getElementById("animation1").style.WebkitAnimationDuration=data; 
      } 
    }); 

</script> 

..... 

// action--

<body> 
<button id="1b" type="button" style="position:absolute; left:377px; top:220px;" value="2s"; onclick="change_position(value)"> - 1 - </button> 

<button id="2b" type="button" style="position:absolute; left:477px; top:220px;" value="15s"; onclick="change_position(value)"> - 2 - </button> 
</body> 

服務器端:

var io = require('socket.io'), 
    connect = require('connect'); 

var app = connect().use(connect.static('public')).listen(3000); 
var chat_room = io.listen(app); 

chat_room.sockets.on('connection', function (socket) { 

    socket.on('chat', function (data) { 
    chat_room.sockets.emit('chat', data); 
    }); 
}); 

回答

0

你可以在你的客戶端使用socket.emit('message',data) 。然後在服務器上通過chat_room.socket.on('message',data)獲取它。使用chat_room.sockets.emit('message',data)發送給客戶端。

1

如果你想有一個消息傳播到所有客戶端/插座,在你的服務器,你應該有這樣的:

chat_room.sockets.on('connection', function (socket) { 

    socket.on('chat', function (data) { 
    socket.broadcast.emit('chat', data); 
    socket.emit('chat',data); 
    }); 

}); 

socket.emit('chat',data);允許您將消息發回也到它的發送者,因爲廣播將全部發送其他套接字。

當然,您可以省略該行並處理客戶端中的消息發送邏輯;即添加一些JavaScript代碼,在將消息發送到服務器之後進行所需的更改。

+0

你能告訴我做錯了嗎?我的意思是我的代碼根據socket.io部分的邏輯衝突 –

+0

'chat_room.sockets.emit'('chat',data)'這行對我來說似乎並不好,因爲你不想從服務器向每個套接字發送一條消息(這就是該行的說法,但我不確定這是否可行)。 用我建議的代碼'socket.broadcast.emit('chat',data);'你說:'名爲'socket'的套接字將在所有其他套接字中廣播觸發'chat'動作的消息,發送'數據'作爲參數「 – Sam

相關問題