Voici mon problème :
J'ai un serveur A, qui exécute node.js et utilise socket.io pour communiquer avec les clients (navigateurs web). Tout cela fonctionne parfaitement.
Cependant, maintenant que j'ai un serveur B, qui doit également se connecter au serveur A via des websockets, je me heurte à un mur. Aucun des clients websocket node.js que j'ai trouvés ne fonctionne avec le socket.io du serveur A.
C'est donc le cas que je cherche à atteindre :
.--------. .----------. .----------.
| CLIENT | <--> | SERVER A | <--> | SERVER B |
'--------' '----------' '----------'
Client-serveur La connexion se fait via socket.io
Maintenant, le serveur B (exécutant node.js) devrait se connecter au serveur A via websocket (afin de passer par le port 80). Mais...
Même le code d'exemple du module socket.io-client ne fonctionne pas... :/
// Connect to server
var socket = new io.Socket('localhost', {port: 8080});
socket.connect();
// Add a connect listener
socket.on('connect', function(socket) {
console.log('Connected.');
});
Le code passe sans aucune erreur et l'exécution se termine après quelques secondes.
Mise à jour : échantillons de code
Le serveur (qui fonctionne très bien) ressemble à ceci :
// Load requirements
var http = require('http'),
io = require('socket.io');
// Create server & socket
var server = http.createServer(function(req, res){
// Send HTML headers and message
res.writeHead(404, {'Content-Type': 'text/html'});
res.end('<h1>Aw, snap! 404</h1>');
});
server.listen(8080);
io = io.listen(server);
// Add a connect listener
io.sockets.on('connection', function(socket) {
console.log('Client connected.');
// Disconnect listener
socket.on('disconnect', function() {
console.log('Client disconnected.');
});
});
Le client ressemble à ceci
console.log('1');
// Connect to server
var io = require('socket.io-client')
var socket = new io.Socket('localhost', {port: 8080});
socket.connect();
console.log('2');
// Add a connect listener
socket.on('connect', function(socket) {
console.log('Connected!');
});
console.log('3');
1, 2 et 3 s'impriment parfaitement, sans erreur, et quelques secondes plus tard, le processus se termine.
De plus, le serveur A n'envoie rien dans le journal, bien que la journalisation de socket.io soit réglée sur "tout".
2 votes
Avez-vous besoin d'un client websockets ou pouvez-vous simplement utiliser de bons vieux sockets ?
0 votes
the node.js websocket clients I've found
lesquels ?0 votes
Je dois au moins émuler les websockets puisque je dois me connecter au même serveur.
0 votes
J'ai essayé socket.io-client, ws, websocket-node
0 votes
Socket.io-client a fonctionné pour moi et pour d'autres ; je pense que vous devriez poster un exemple qui ne fonctionne pas et qui illustre vos problèmes. Essayez également d'ajouter process.on('UncaughtException') ou de consigner les données en cours de route ; "sans aucune erreur" signifie "je n'ai pas assez cherché" : )
0 votes
Bien sûr, j'ai UncaughtException là-dedans, donc je ne pense pas que cela résout quoi que ce soit, puisque comme je l'ai dit, je n'obtiens aucune erreur (ni exception)... J'ai aussi beaucoup de console.log et ils racontent la même histoire. De plus, cela fait déjà 6 heures que je suis confronté à ce seul problème, donc je pense que j'ai suffisamment cherché, même si je n'obtiens aucune erreur.
0 votes
Toutes les réponses ci-dessous tentent de réinventer les files d'attente de messages et les systèmes d'événements qui existent déjà.