2015-06-22 64 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