我使用 Node.js 创建了一个 TCP 服务器,它监听客户端连接。 我需要在 Node.js 中再次将数据从 TCP 服务器 传输到 HTTP 服务器 可能通过 Websocket(socket.io)。
但是,我不知道如何创建这样的连接,以便 TCP 服务器能够通过 Websocket 将数据推送到 HTTP 服务器。
非常感谢。
最佳答案
我尝试了很多事情来完成这项工作。大多数时候,我依靠 socket.io 来实现它,但它无法与 TCP 一起工作。
但是,net.Socket 足以满足此目的。
这是它的工作示例。
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);
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");
});
浏览器客户端
<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>
这样,Node.js 中的 HTTP 服务器和 TCP 服务器之间就打开了一个套接字。
关于node.js - 在 node.js 中的 TCP 服务器和 HTTP 服务器之间创建 WebSockets,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11967958/