2015-06-22 39 views
-1

我對Node.js使用'ws'庫。套接字沒有意義?

我可以編寫代碼,將數據從我的服務器發送到客戶端,發佈日期和時間更新,並在單擊按鈕時關閉套接字;

var wss = new WebSocketServer({server: server}); 
 
console.log("WebSocket server created"); 
 

 
wss.on('connection', function(socket) { 
 
     // SEND DATE AND TIME EVERY SECOND 
 
\t var interval = setInterval(function() { 
 
\t \t socket.send(JSON.stringify(new Date()), function() {}); 
 
\t }, 1000); 
 

 
\t console.log("WebSocket connection opened"); 
 

 
\t socket.on('close', function() { 
 
\t \t console.log("WebSocket connection closed"); 
 
\t \t clearInterval(interval); 
 
\t }); 
 
});

<html> 
 
    <head> 
 
    <script> 
 
     var host = location.origin.replace(/^http/, 'ws') 
 
     var ws = new WebSocket(host); 
 
     ws.onmessage = function (event) { 
 
     var li = document.createElement('li'); 
 
     li.innerHTML = JSON.parse(event.data); 
 
     document.querySelector('#pings').appendChild(li); 
 
     }; 
 

 
     function pressed() { 
 
     // CLOSE STREAM 
 
     ws.close(); 
 
     } 
 
    </script> 
 
    </head> 
 

 
    <body> 
 
    <h1>Pings</h1> 
 
    <form name="form1" method="post" action=""> 
 
    <input type="button" value="Call server" onClick="pressed()"> 
 
    <ul id='pings'></ul> 
 
    </body> 
 
</html>

但由於某些原因,我不能想出一個辦法,將數據發送回老家到服務器,並調用控制檯打印「按下!」管他呢。這是一種限制,因爲它不是雙向的,它看起來像套接字是單向流。

像這樣;

var wss = new WebSocketServer({server: server}); 
 
    console.log("WebSocket server created"); 
 

 
    wss.on('connection', function(socket) { 
 
      // SEND DATE AND TIME EVERY SECOND 
 
    \t var interval = setInterval(function() { 
 
    \t \t socket.send(JSON.stringify(new Date()), function() {}); 
 
    \t }, 1000); 
 

 
    \t console.log("WebSocket connection opened"); 
 

 
     // LOOK FOR 'pressed' BEING SENT 
 
     \t socket.on('pressed', function() { 
 
\t \t  console.log("Pressed!"); 
 
\t \t  socket.close(); 
 
\t  }); 
 
     
 
    \t socket.on('close', function() { 
 
    \t \t console.log("WebSocket connection closed"); 
 
    \t \t clearInterval(interval); 
 
    \t }); 
 
    });

<html> 
 
    <head> 
 
    <script> 
 
     var host = location.origin.replace(/^http/, 'ws') 
 
     var ws = new WebSocket(host); 
 
     ws.onmessage = function (event) { 
 
     var li = document.createElement('li'); 
 
     li.innerHTML = JSON.parse(event.data); 
 
     document.querySelector('#pings').appendChild(li); 
 
     }; 
 

 
     // SEND 'pressed' TO SERVER 
 
     function pressed() { 
 
     ws.send('pressed'); 
 
     } 
 
    </script> 
 
    </head> 
 
    
 
    <body> 
 
    <h1>Pings</h1> 
 
    <form name="form1" method="post" action=""> 
 
    <input type="button" value="Call server" onClick="pressed()"> 
 
    <ul id='pings'></ul> 
 
    </body> 
 
</html>

我缺少什麼,剛開始學習有關插座,感覺就像我試圖通過磚牆用棉勺子挖。

+0

真的,有人決定downvote一個關於插槽進行數據交互的誤解?合法的。 – ARMATAV

回答

1

客戶端不會導致任意事件在套接字上觸發。這始終是一個message事件。使用相同的客戶端,試試這個服務器代碼在你connection處理程序:

socket.on('message', function(data) { 
     // data === "pressed", since that's what the client sent 
     console.log("Pressed!"); 
     socket.close(); 
    }); 
+0

工程。我現在感到非常愚蠢。我完全理解這個插件是如何工作的。謝謝,一旦5分鐘定時器完成,將標記爲已回答。 – ARMATAV