如何使Node.js中的websocket等待

我正在尝试在networking套接字上进行连接。但是我无法让它等到服务器启动。 每当我启动我的客户端没有服务器运行我陷入错误事件..我应该做什么,使我的客户端等待,直到服务器启动?

我的客户在Node.js

var WebSocket = require('ws'); var ws = new WebSocket('ws://localhost:90'); ws.on('open', function() { console.log('Client 1 Started'); }); ws.on('message', function(message) { console.log(message); }); ws.on('error', function(err) { console.log('Client Error :- ',err.code); }); ws.on('close', function() { console.log('Connection terminated..Closing Client 1'); }); 

我认为投票是要走的路。 尝试这样的事情:

 var WebSocket = require('ws'), ws; var poll = function( ) { ws = new WebSocket('ws://localhost:90'); ws.on('open', function() { console.log('Client 1 Started'); }); ws.on('message', function(message) { console.log(message); }); ws.on('error', function(err) { // Check error code? Maybe put it in close event? setTimeout( poll, 1000); }); ws.on('close', function() { console.log('Connection terminated..Closing Client 1'); }); } 

毕竟,为了等待服务器启动,你将不得不从服务器接收一些事件,比如“嗨,我起来了”,但是你必须已经连接到它。 所以我不认为有其他的方式。

从法文翻译成英文只为你^^ tchat在node.js上的小题目(对法语发表评论感谢) http://www.atinux.fr/2011/08/28/tutoriel-socket-io-debutant/

服务器端

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

然后,必须在使用Node JS创buildHTTP服务器之后,才能使用Socket.IO来监听它:

 io = io.listen(app); 

客户端

您需要在标题中插入链接到库。 HTML:

 <script type="text/javascript" src="/socket.io/socket.io.js"> 

然后你有一个新的连接到服务器:

 <script type="text/javascript"> var socket = io.connect(); </script> 

Evenement

要创build活动,只需执行以下操作:

  socket.on('monEvenement', maFonction); 

正如你所看到的,socketvariables还没有被声明为服务器端,事实上,它应该恢复感谢事件“连接”

 io.sockets.on('connection', function (socket) { }); 

致电平安

 socket.emit('monEvenement', mesDonnees); 

其他广播

 socket.broadcast.emit('monEvenement', mesDonnees); 

示例服务器端

 var html = require('fs').readFileSync(__dirname+'/app.html'); var app = require('http').createServer(function(req, res){ res.end(html); }); app.listen(8080); var io = require("socket.io"); var io = io.listen(app); io.sockets.on('connection', function (socket) { socket.emit('faitUneAlerte'); }); 

例如客户端

 <script type="text/javascript" src="/socket.io/socket.io.js"></script> <script type="text/javascript"> var socket = io.connect(); socket.on('faitUneAlerte', function () { alert('Je fais une alerte car on m\'a appelé !'); }); </script> 

最后 * Tchat Html *

 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>Tchat avec Socket.IO</title> <script type="text/javascript" src="/socket.io/socket.io.js"></script> <style type="text/css"> body { background-color : rgb(50,50,80); color : white; text-align : center; } #tchat { background-color : white; opacity : 0.8; width : 500px; height : 300px; margin : auto; border : 3px rgb(40,40,40) solid; overflow : auto; } .line { border-bottom : 1px rgb(80,80,80) solid; padding : 4px; text-align:left; color : rgb(40,40,40); } </style> </head> <body> <h1>Tchat avec Socket.IO</h1> <div id="tchat"></div> <form onsubmit="return (envoiMessage());"> <b>Message : </b><input type="text" name="message" id="message" style="width:250px;" /> <input type="submit" value="Envoyer" /> </form> <script type="text/javascript"> // On demande le pseudo de l'utilisateur var pseudo = prompt('Votre pseudo ?') || 'Utilisateur'; // On se connecte au serveur var socket = io.connect(); // On creer l'evenement recupererMessages pour recuperer direcement les messages sur serveur socket.on('recupererMessages', function (messages) { // messages est le tableau contenant tous les messages qui ont ete ecris sur le serveur var html = ''; for (var i = 0; i < messages.length; i++) html += '<div class="line"><b>'+messages[i].pseudo+'</b> : '+messages[i].message+'</div>'; document.getElementById('tchat').innerHTML = html; }); // Si quelqu'un a poste un message, le serveur nous envoie son message avec l'evenement recupererNouveauMessage socket.on('recupererNouveauMessage', function (message) { document.getElementById('tchat').innerHTML += '<div class="line"><b>'+message.pseudo+'</b> : '+message.message+'</div>'; }); // Quand on veut envoyer un message (quand il a valider le formulaire) function envoiMessage(mess) { // On recupere le message var message = document.getElementById('message').value; // On appelle l'evenement se trouvant sur le serveur pour qu'il enregistre le message et qu'il l'envoie a tous les autres clients connectes (sauf nous) socket.emit('nouveauMessage', { 'pseudo' : pseudo, 'message' : message }); // On affiche directement notre message dans notre page document.getElementById('tchat').innerHTML += '<div class="line"><b>'+pseudo+'</b> : '+message+'</div>'; // On vide le formulaire document.getElementById('message').value = ''; // On retourne false pour pas que le formulaire n'actualise pas la page return false; } </script> </body> </html> 

最后 * app.js *

 var http = require('http'); var fs = require('fs'); // Creation du serveur var app = http.createServer(function (req, res) { // On lit notre fichier app.html fs.readFile('./tchat.html', 'utf-8', function(error, content) { res.writeHead(200, {'Content-Type' : 'text/html'}); res.end(content); }); }); // Variables globales // Ces variables resteront durant toute la vie du seveur pour et sont commune pour chaque client (node server.js) // liste des messages de la forme { pseudo : 'Mon pseudo', message : 'Mon message' } var messages = []; //// SOCKET.IO //// var io = require('socket.io'); // Socket io ecoute maintenant notre application ! io = io.listen(app); // Quand une personne se connecte au serveur io.sockets.on('connection', function (socket) { // On donne la liste des messages (evenement cree du cote client) socket.emit('recupererMessages', messages); // Quand on recoit un nouveau message socket.on('nouveauMessage', function (mess) { // On l'ajout au tableau (variable globale commune a tous les clients connectes au serveur) messages.push(mess); // On envoie a tout les clients connectes (sauf celui qui a appelle l'evenement) le nouveau message socket.broadcast.emit('recupererNouveauMessage', mess); }); }); /////////////////// // Notre application ecoute sur le port 8080 app.listen(8080); console.log('Live Chat App running at http://localhost:8080/'); 

它的工作对我来说…现在客户端可以等待服务器启动…

 var WebSocket = require('ws'); var ws = new WebSocket('ws://localhost:90'); ws.on('error', function(err) { console.log('Waiting For Connection..'); setTimeout( poll, 1000); }); var poll = function( ) { ws = new WebSocket('ws://localhost:90'); ws.on('open', function() { console.log('Client 1 Started'); }); ws.on('message', function(message) { console.log(message); }); ws.on('error', function(err) { // Check error code? Maybe put it in close event? setTimeout( poll, 1000); }); ws.on('close', function() { console.log('Connection terminated..Closing Client 1'); }); }