【问题标题】:How to handle tcp/ip raw requests and http requests on the same server如何在同一台服务器上处理 tcp/ip 原始请求和 http 请求
【发布时间】:2018-05-29 06:24:04
【问题描述】:

我正在开发一个 gps 跟踪系统,并在 node js 上构建了一个服务器。 这是文件的外观以供参考。

const net = require('net');
const lora_packet = require('lora-packet');
const dataParser = require('./dataParser');

const clients = [];


net.createServer(function(socket) {
    socket.name = socket.remoteAddress + ":" + socket.remotePort;
    clients.push(socket);


    socket.on('data', function(data) {
        console.log("Buffer sent by terminal : ");
        console.log(data);
        const packet = lora_packet.fromWire(data, 'hex');
        const str = packet._packet.PHYPayload.toString('hex');
        dataParser.parse_data(str, socket);

    });
    socket.on('end', function() {
        clients.splice(clients.indexOf(socket), 1);
        //broadcast(socket.name + "has left the cartel.\n");
    });

    function broadcast(message, sender) {
        clients.forEach(function(client) {
            if (client === sender) client.write(message + "\nsent\n");
            return;
            client.write(message);
        });
        process.stdout.write(message);
    }
}).listen(8080);

console.log("cartel is running on the port 8080\n");

此服务器文件仅处理来自硬件的请求并处理原始 tcp/ip 请求。

我希望服务器也能处理 http 请求,并希望在服务器中加入路由功能,以便浏览器的客户端应用程序。

1) 有没有什么方法可以让同一台服务器处理 http 请求,或者我应该打开另一个端口并在其上部署一个 express node js 应用程序?

2)如果我使用同一个8080端口进行http,如何实现路由?

3) 如果我为 http 和原始 tcp/ip 使用不同的端口,那么两台服务器之间通信的最佳方式是什么。 tcp/ip server 和 http server 之间的通信应该通过 socket 进行(动态发送数据)。

从使用套接字的http服务器,数据必须动态发送到浏览器以更新实时位置

那么流程对吗?

硬件()TCP/IP服务器()Http服务器()浏览器

如果需要更多信息来解决查询,我会提供!

谢谢

【问题讨论】:

    标签: javascript node.js express gps


    【解决方案1】:

    尝试在同一个端口上使用多种协议是非常复杂的。它需要在每个连接开始时采用某种方案来采样传入数据并识别它是哪个协议,然后将该连接分流到正确的代码以处理该协议。我不建议这样做。

    只需在不同的端口上打开第二台服务器,让 Express 服务器来处理您的 http 请求,就更容易了。很简单。您可以在同一个应用程序中正确执行此操作。因为两台服务器可以在同一个应用程序中,所以您可以直接从一个连接读取并写入另一个连接。不需要进程间通信。

    有没有什么方法可以让同一台服务器处理 http 请求,或者我应该打开另一个端口并在上面部署一个 express node js 应用程序?

    打开另一个端口。除非您有特定的理由使用两个进程,否则无需编写另一个应用程序。您可以将普通 TCP 服务器和 Express 服务器放在同一个 node.js 应用程序中。

    如果我对http使用同一个8080端口,如何实现路由?

    这并不容易。不建议多协议使用同一个端口。

    如果我为 http 和原始 tcp/ip 使用不同的端口,那么两台服务器之间通信的最佳方式是什么。 tcp/ip server 和 http server 之间的通信应该通过 socket 进行(动态发送数据)。

    您可以将两台服务器放在同一个 node.js 应用程序中,然后您可以使用相同的代码直接从一台服务器读取/写入另一台服务器。无需进程间通信。

    从使用套接字的http服务器,数据必须动态发送到浏览器以更新实时位置

    向浏览器动态发送数据通常意味着您希望浏览器保持与服务器的 webSocket 或 socket.io 连接,这样您就可以随时通过现有连接向浏览器发送数据。否则,您将不得不“等待”浏览器请求数据,然后在请求时以数据响应。

    【讨论】:

    • express.js 应用如何处理客户端,TCP/IP 服务器如何处理硬件设备?如何在套接字之间保持稳定且低延迟的数据流。目前还不清楚如何在两台服务器之间传递数据,以及如何在 Web 浏览器上识别从设备到正确客户端的数据包。另外,我应该先在数据库中保存数据吗?我研究过单套接字实例,但不知道如何在不同的服务器上维护两个套接字实例!
    猜你喜欢
    • 1970-01-01
    • 2011-07-27
    • 2020-10-29
    • 2010-09-06
    • 1970-01-01
    • 2015-08-08
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多