我正在尝试在网络套接字上建立连接。但我无法让它等到服务器启动。每当我在没有服务器运行的情况下启动我的客户端时,我都会遇到错误事件。我需要做什么才能使我的客户端等到服务器启动之后?
我在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');
});
答案 0 :(得分:1)
仅为您翻译法语到英语^ ^ node.js上tchat的小主题(对不起法语评论) 来自http://www.atinux.fr/2011/08/28/tutoriel-socket-io-debutant/
服务器端
var io = require('socket.io');
然后,在创建带有Node JS的HTTP服务器之后,必须使用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 强>
要创建活动,只需执行以下操作:
socket.on('monEvenement', maFonction);
正如您所看到的,套接字变量尚未声明为服务器端,事实上,它应该通过事件&#34;连接&#34;
恢复io.sockets.on('connection', function (socket) {
});
致电Evenement
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/');
答案 1 :(得分:-1)
它的工作对我来说......现在客户端可以等待服务器开始...
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');
});
}