【问题标题】:Receive non Http messages using jetty使用 jetty 接收非 Http 消息
【发布时间】:2016-11-18 23:32:41
【问题描述】:

我正在使用嵌入式码头和弹簧进行 java 到 java 通过 http 进行通信。我的问题是我的服务器应用程序也必须在同一个端口上处理纯 TCP 消息。

有没有办法检测是否有 servlet 无法处理的 TCP 消息到达?

感谢您的回答,我添加了更多详细信息:

  • 我无法修改客户端。原因是老版本的客户端使用的是纯java tcp socket,结果证明新服务器必须向后兼容老客户端。
  • 必须使用相同的端口
  • 旧客户端消息是简单套接字上的短序列化文本。 1:打开连接,2:发送文本,3:关闭连接
  • 我的服务器看起来像这样:http://kielczewski.eu/2013/11/using-embedded-jetty-spring-mvc/
  • 我不需要解析消息。检测到没有使用 http 的消息到达并获取源主机名就足够了。

【问题讨论】:

  • 您提出的任何解决方案都需要您自己的高度定制的ServerConnector 实现来预解析传入的任何内容以了解其 HTTP/0.9、HTTP/1.0、HTTP/1.1、HTTP /2,或原始 TCP,然后在 Jetty(对于 http)或您的应用程序(如果不是 http)中调用适当的层。出于好奇,为什么不直接使用 WebSocket 呢?

标签: java spring http embedded-jetty


【解决方案1】:

您可能想了解如何将自定义 ConnectionFactory 添加到您的 HTTP 端口的 ServerConnector

这个ConnectionFactory 概念是当前在Jetty 中支持PROXY 协议的方式。

在你的情况下,你可能有类似 ...

MyTcpConnectionFactory tcpConnectionFactory = new MyTcpConnectionFactory();
ServerConnector http = new ServerConnector(server);
http.addFirstConnectionFactory(tcpConnectionFactory);
server.addConnector(http);

在您的情况下,您将覆盖 newConnection(Connector connector, EndPoint endPoint) 方法并实现对您的 TCP 流或 HTTP 流的检查。

如果它是您的流程,您自己处理该连接上的通信,然后在完成后抛出 IOException,表明您不希望码头将该连接作为 HTTP 处理。

否则,您将该 Connection 对象返回给 Jetty 以作为 HTTP 处理。

【讨论】:

    【解决方案2】:

    我的朋友,你在这里疯狂骑行。您需要意识到 HTTP 是 TCP ......它只是在 TCP 套接字上发送的内容,将其分类为 HTTP 与否。话虽如此,您可以使用过滤器拦截连接,即

    1) 为所有传入连接创建一个过滤器(谷歌 Java 应用服务器过滤器并检查 Jetty 实现)

    2)检查请求的URI,如果失败,则请求不是HTTP(可能要在这里仔细检查请求测试逻辑)

    3) 根据串口socket/http请求将请求重定向到合适的Servlet/Function

    另一方面,为什么不将 https(端口 443)用于 http,将端口 80 用于您的套接字要求?


    我的立场是正确的。过滤器不起作用。 在这种情况下,您将不得不编写一个迷你防火墙。您必须扫描所有输入以查找 https 标头并相应地重定向。你能至少提供一些关于你想接收的纯 TCP 消息的上下文吗?您对发送代码有任何控制权吗?你知道你可以将 TCP/HTTP 连接升级到 websocket(涉及客户端和服务器),它会比普通的 TCP、相同的端口连接更好地工作,并且内置在 Jetty 中,所以没有自定义样板,只是一个 websocket servlet

    【讨论】:

    • 如果它到达过滤器的点,它被检测为 HTTP 请求(已被解析、验证标头、识别上下文以及调用适当的过滤器链和 servlet)。否则,它将失败 HTTP 解析步骤并导致自动立即400 Bad Request 错误响应(并关闭连接)
    • 非常正确,错过了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-07-19
    • 2016-11-30
    • 1970-01-01
    • 1970-01-01
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多