2015-06-22 3 views
-1

Я использую библиотеку ws для Node.js.Розетки не имеют никакого смысла?

Я могу написать код, который отправляет данные с моего сервера на мой клиент, публикует обновление даты и времени и закрывает сокет, когда я нажимаю кнопку;

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 неправильного представления о взаимодействии данных в сокетах? Legit. – ARMATAV

ответ

1

Клиент не может вызвать произвольные события для запуска сокета. Это всегда событие message. Используя тот же клиент, попробуйте этот код сервера в вашем connection обработчика:

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

Работы. Сейчас я чувствую себя настолько глупо. Из-за этого я полностью понимаю, как работает socketing. Спасибо, отметим как ответ после завершения 5-минутного таймера. – ARMATAV

Смежные вопросы