node.js - rooms - socket.io reconnect
Crear WebSockets entre un servidor TCP y un servidor HTTP en node.js (3)
Creé un servidor TCP usando Node.js que escucha las conexiones de los clientes. Necesito transmitir datos del servidor TCP al servidor HTTP nuevamente en Node.js posiblemente a través de un Websocket ( socket.io ).
Sin embargo, no sé cómo crear tal conexión de modo que el servidor TCP pueda enviar datos al servidor HTTP a través de Websocket.
Muchas gracias.
Puede usar socket.io o ws (solo WebSocket) en Node.js como cliente (no solo en el navegador)
var io = require(''socket.io-client'');
var socket = io.connect(''http://IP address of Websocket server'');
socket.on(''news'', function (data) {
console.log(data);
socket.emit(''my other event'', { my: ''data'' });
});
Si necesita comunicarse servidor-servidor que websockets probablemente no sea la mejor opción. Pruebe una de las bibliotecas RPC o simplemente use HTTP o su propio protocolo.
Estaba intentando muchas cosas para hacer este trabajo. La mayoría de las veces confiaba en socket.io para que funcionara, pero simplemente no funcionaba con TCP.
Sin embargo, net.Socket es suficiente.
Aquí está el ejemplo de trabajo de eso.
Servidor TCP
var net = require(''net'');
var HOST = ''localhost'';
var PORT = 4040;
var server = net.createServer();
server.listen(PORT, HOST);
server.on(''connection'', function(sock) {
console.log(''CONNECTED: '' + sock.remoteAddress +'':''+ sock.remotePort);
sock.write("TCP sending message : 1");
console.log(''Server listening on '' + server.address().address +'':''+
server.address().port);
}).listen(PORT, HOST);
Servidor HTTP
var http = require(''http'').createServer(httpHandler),
fs = require("fs"),
wsock = require(''socket.io'').listen(http),
tcpsock = require(''net'');
var http_port = 8888;
var tcp_HOST = ''localhost'';
var tcp_PORT = 4040;
/**
* http server
*/
function httpHandler (req, res) {
fs.readFile(__dirname + ''/index.html'',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end(''Error loading index.html'');
}
res.writeHead(200);
res.end(data);
});
}
http.listen(http_port);
console.info("HTTP server listening on " + http_port);
wsock.sockets.on(''connection'', function (socket) {
var tcpClient = new tcpsock.Socket();
tcpClient.setEncoding("ascii");
tcpClient.setKeepAlive(true);
tcpClient.connect(tcp_PORT, tcp_HOST, function() {
console.info(''CONNECTED TO : '' + tcp_HOST + '':'' + tcp_PORT);
tcpClient.on(''data'', function(data) {
console.log(''DATA: '' + data);
socket.emit("httpServer", data);
});
tcpClient.on(''end'', function(data) {
console.log(''END DATA : '' + data);
});
});
socket.on(''tcp-manager'', function(message) {
console.log(''"tcp" : '' + message);
return;
});
socket.emit("httpServer", "Initial Data");
});
Cliente del navegador
<script src="/socket.io/socket.io.js"></script>
<script>
var socket = io.connect(''http://localhost'');
socket.on(''httpServer'', function (data) {
console.log(data);
document.write(data + "/r/n");
socket.emit(''tcp'', "For TCP");
});
</script>
De esta forma, hay un socket abierto entre el servidor HTTP y el servidor TCP en Node.js.