- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我用 express 实现了 2 个网络服务器。一个是主服务,一个是微服务。
它们通过 HTTP REST API 进行通信,过去我们在微服务上启动了一个 socket.io 服务器,以观察主服务器的启动/关闭状态。
----HTTP-----
[main server] [microservice]
--socket.io--
然后我意识到 socket.io 不是正确的工具。所以我决定将 socket.io 换成原始 TCP 套接字。
所以问题是:是否可以在原始 TCP 服务器(在同一端口上)的“顶部”启动 http 服务器?(允许通过 TCP 客户端连接并发送 HTTP请求?)
到目前为止我有这个:
const app = express();
const server = http.createServer(app);
// const io = sio(server);
server.listen(config.port, config.ip, callback);
我正在尝试与 this 集成
我正在尝试实现并通过 socket.io 成功实现的是在微服务上启动一个套接字服务器,在主服务器上连接到它,使其保持事件状态,并监视事件以保持全局变量 bool 值“连接”与它同步。我正在使用此变量来了解我的微服务前端状态,还可以预先检查我是否应该在请求时尝试请求微服务,以及用于登录目的。我想避免手动轮询,首先是为了可维护性,也是为了实时目的。
最佳答案
Is that possible to start the http server "ON TOP" of a raw TCP server (on the same port) ?
有点,不是真的。 HTTP 在 TCP 之上运行。因此,您可以在技术上打开一个原始 TCP 服务器,然后编写您自己的代码来解析传入的 HTTP 请求并发送合法的 HTTP 响应。但是,现在您刚刚编写了自己的 HTTP 服务器,因此它不再是原始 TCP。
尝试让单个服务器同时接受 HTTP 和其他一些协议(protocol)的挑战在于,您的服务器必须能够确定对于任何给定的传入数据包,它应该如何处理它。它是 HTTP 请求吗?或者是您的其他类型的自定义请求。写这样一个东西在技术上是可行的。
或者,您可以使用 webSocket 技术,该技术以 HTTP 请求开始,但使用 upgrade
header 请求升级到其他协议(protocol)。在 http 规范中完全定义了如何执行此操作。
但是,除非你有一些网络限制,你只能有一台服务器或一个开放端口,我会问为什么?这是一种复杂的做事方式。为不同类型的通信使用不同的端口和不同的监听服务器实际上并不需要任何成本。而且,当每台服务器只监听一种类型的流量时,事情就简单多了。您可以为 HTTP 请求使用标准 HTTP 服务器,也可以为自定义 TCP 请求使用您自己的自定义 TCP 服务器。
我无法从您的问题中真正看出您要解决的真正问题是什么。如果您只是想测试您的 HTTP 服务器是否启动/关闭,那么使用一些外部进程,每隔一段时间只查询您的一个 HTTP REST API 调用,然后辨别服务器是否按预期响应。许多现有的代码体也可以配置为执行此操作(检查 Web 服务器的运行状况是一项常见任务)。
您链接到的代码显示了一个示例服务器,它只发回它收到的任何消息(称为回显服务器)。这只是一个经典的测试服务器,供客户端连接作为测试。第二个代码块是一段客户端代码示例,用于连接到服务器、发送一条短消息然后断开连接。
来自您的评论:
The underlying TCP server wouldn't even be used for messaging, it just would be used to watch connect/disconnect events
http 服务器已经从 TCP 服务器继承,因此它具有服务器本身的所有相同事件。您可以在 http server doc 中查看所有这些事件.我不知道你到底想要什么,但有一些服务器生命周期事件,例如:
listening (server now listening)
close (server now closed)
还有服务器事件事件,例如:
connect (new client connected)
request (new client issues a request)
并且,从请求事件中,您可以获得 httpClientRequest
和 httpServerResponse
对象,它们允许您监视单个连接的生命周期,包括事件获取实际传入连接的套接字对象。
这是一个 code example对于 http 服务器文档中的 connect
事件。
关于node.js - 网络服务器之上的http服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44717051/
据我了解,HTTP POST 请求的正文大小没有限制。因此,客户端可能会在一个 HTTP 请求中发送 千兆字节 的数据。现在我想知道 HTTP 服务器应该如何处理此类请求。 Tomcat 和 Jett
在了解Web Deploy我遇到了一些讨论 http://+:80 和 http://*:80 的 netsh.exe 命令。这些是什么意思? 最佳答案 引自URLPrefix Strings (Wi
假设我有一个负载均衡器,然后是 2 个 Web 服务器,然后是一个负载均衡器,然后是 4 个应用程序服务器。 HTTP 响应是否遵循与 HTTP 请求服务相同的路径? 最佳答案 按路径,我假设您是网络
我有一个带有 uri /api/books/122 的资源,如果在客户端为此资源发送 HTTP Delete 时该资源不存在,那么相应的响应代码是什么这个 Action ?是不是404 Not Fou
是否有特定的(或约定的)HTTP 响应消息(或除断开连接之外的其他操作)来阐明服务器不接受 pipelined HTTP requests ? 我正在寻找能让客户端停止流水线化它的请求并分别发送每个请
在了解Web Deploy我遇到了一些讨论 http://+:80 和 http://*:80 的 netsh.exe 命令。这些是什么意思? 最佳答案 引自URLPrefix Strings (Wi
我有一个带有 uri /api/books/122 的资源,如果在客户端为此资源发送 HTTP Delete 时该资源不存在,那么相应的响应代码是什么这个 Action ?是不是404 Not Fou
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
我使用 Mule 作为 REST API AMQP。我必须发送自定义请求方法:“PRINT”,但我收到: Status Code: 400 Bad Request The request could
我需要针对具有不同 HTTP 响应代码的 URL 测试我的脚本。我如何获取响应代码 300、303 或 307 等的示例/示例现有 URL? 谢谢! 最佳答案 您可以使用 httpbin为此目的。 例
我正在尝试编写一个程序来匹配 HTTP 请求及其相应的响应。似乎在大多数情况下一切都运行良好(当传输完全有序时,即使不是,通过使用 TCP 序列号)。 我发现的唯一问题是当我有流水线请求时。在那之后,
RESTful Web Services鼓励使用 HTTP 303将客户端重定向到资源的规范表示。它仅在 HTTP GET 的上下文中讨论主题。 这是否也适用于其他 HTTP 方法?如果客户端尝试对非
当使用chunked HTTP传输编码时,为什么服务器需要同时写出chunk的字节大小并且后续的chunk数据以CRLF结尾? 这不会使发送二进制数据“CRLF-unclean”和方法有点多余吗? 如
这个问题在这里已经有了答案: Is it acceptable for a server to send a HTTP response before the entire request has
如果我向同一台服务器发出多个 HTTP Get 请求并收到每个请求的 HTTP 200 OK 响应,我如何使用 Wireshark 判断哪个请求映射到哪个响应? 目前看起来像是发出了一个 http 请
func main() { http.HandleFunc("/", handler) } func handler(w http.ResponseWriter, r http.Request
我找不到有值(value)的 NodeJS with Typescript 教程,所以我在无指导下潜入水中,果然我有一个问题。 我不明白这两行之间的区别: import * as http from
问一个关于Are HTTP headers case-sensitive?的问题,如果 HTTP 方法区分大小写,大多数服务器如何处理“get”或“post”与“GET”或“POST”? 例如,看起来
我正在使用ASP.NET,在其中我通过动词GET接收查询,该应用程序专用于该URL。 该代码有效,但是如果用户发送的密码使http 200无效,请回答我,并在消息的正文中显示“Fail user or
Closed. This question needs details or clarity。它当前不接受答案。 想改善这个问题吗?添加详细信息,并通过editing this post阐明问题。 9
我是一名优秀的程序员,十分优秀!