node.js - 在 node.js 中的 TCP 服务器和 HTTP 服务器之间创建 WebSockets

标签 node.js websocket socket.io tcpserver httpserver

我使用 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/

相关文章:

javascript - 通过 websockets 发送相位图像

node.js - 在断开连接事件中重新连接套接字

javascript - 如何确定回调函数是否已调用

c++ - 使用 boost 库构建 socket.io C++

node.js - 管理多个 TCP 套接字 nodejs

javascript - 如何在 https 请求中设置 session 或 cookie 到 url?

javascript - TDD原理,如何让测试失败

node.js - websocket 服务器的 Apache 代理不工作

javascript - Nodejs、 express 、Ajax : Function triggers only Six Times

javascript - 从 Neo4j 解析复杂的 JSON 结果