【问题标题】:How to create a nodejs HTTP server with an existing TLS client socket?如何使用现有的 TLS 客户端套接字创建 nodejs HTTP 服务器?
【发布时间】:2021-05-03 16:10:56
【问题描述】:

我的笔记本电脑上有一个 nodejs TLS 客户端套接字,连接到另一台计算机(服务器)上的 TLS 服务器套接字。服务器无法连接到我的笔记本电脑。笔记本电脑需要启动连接。

现在我希望服务器向我的笔记本电脑发出请求。这个想法是重用 HTTP 协议。有没有办法使用现有的 TLS 客户端套接字创建 HTTP 服务器?

这样,服务器机器可以发出HTTP请求,客户端TLS接收,HTTP服务器会解析它?还是我错过了什么?

【问题讨论】:

    标签: node.js ssl tls1.2


    【解决方案1】:

    在笔记本电脑和服务器之间打开 TCP 套接字后,您可以通过该套接字以任何方式发送数据。所以,如果服务器想向笔记本电脑发送一些查询,它就可以这样做。您必须在 TCP 之上发明自己的协议才能做到这一点,但如果您愿意,它可以像基于文本/行的协议一样简单。

    或者,您可以建立一个从笔记本电脑到服务器的 webSocket 或 socket.io 连接(而不是纯 TCP 连接),而不是建立一个普通的 TCP 连接,然后任何一方都可以通过任一方式和协议部分发送消息已经处理好了。如果你使用socket.io,如果连接中断也会自动重新连接。

    没有简单的方法将 HTTP 服务器连接到现有的 TCP 套接字,而且它也充满了困难,因为 HTTP 连接通常不是一个连续的连接,您可以通过它发送许多单独的请求(http 的高级版本可以做到那个,但我怀疑你想在两端实现所有这些逻辑)。您可以在现有的 TCP 套接字上使用 HTTP 协议,但这可能比仅使用上面的 webSocket/socket.io 想法要实现更多的工作。

    【讨论】:

    • 但是这里的目标是避免在套接字的两边实现我自己的协议。这个想法是使用 nodejs http 代理来处理请求的 HTTP 格式和验证。
    • @Mr.Goferito - 然后按照我的建议使用 socket.io。它为您完成所有协议内容。您可以通过任何一种方式发送带有数据的消息,这比 http 更容易。而且,正如我所说,没有简单的方法可以连接一个持久的 http 服务器,您可以将许多请求发送到现有的套接字中。你基本上将不得不通过你的套接字隧道 http。那是一团糟。 socket.io 连接将花费我不到 15 分钟的时间来实现。您必须在两端安装 socket.io 并查看如何设置连接和发送消息,但比 IMO 的替代方案更容易。
    • 我已经有一个有效的 TLS 连接,我已经可以双向发送文本数据了。我只是想避免创建自己的协议。
    • 另外,在我卑微的尝试中,我的想法是创建一个 http 服务器,并以某种方式配置它以侦听现有的套接字。不仅仅是通过套接字抛出 HTTP 块。
    • 好吧,如果您将 TLS 套接字更改为 socket.io 套接字,那么您不必发明自己的协议,因为 socket.io 已经为您完成了。 socket.io 基于 webSocket,它专门用于使用现有的基于消息的协议通过长期连接发送双向消息。它专为您正在尝试做的事情而构建。我建议使用它。您为什么要避免使用专门为您的工作而构建的机制和库?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 2015-09-16
    • 2014-04-06
    • 2017-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多