我们可以打一个UDP调用以进行休息服务吗?



我有一个休息端点,我想使用UDP访问它,例如Java Datagram。我知道尝试甚至不是最好的做法,但是我最近的项目有一些硬件限制。硬件只能进行UDP调用,而我现有的服务已搁置,即http/https。
我正在寻找可以重复使用现有服务的任何方式。我尝试了关注代码,但收到了UnknownHostException

public class UDPClinet {
    public static void main(String[] args) {
        String hostname = "https://jsonplaceholder.typicode.com/posts/1";
        int port = 80;
        try {
            InetAddress address = InetAddress.getByName(hostname);
            DatagramSocket socket = new DatagramSocket();
            while (true) {
                DatagramPacket request = new DatagramPacket(new byte[1], 1, address, port);
                socket.send(request);
                byte[] buffer = new byte[512];
                DatagramPacket response = new DatagramPacket(buffer, buffer.length);
                socket.receive(response);
                String quote = new String(buffer, 0, response.getLength());
                System.out.println(quote);
                System.out.println();
                Thread.sleep(10000);
            }
        } catch (SocketTimeoutException ex) {
            System.out.println("Timeout error: " + ex.getMessage());
            ex.printStackTrace();
        } catch (IOException ex) {
            System.out.println("Client error: " + ex.getMessage());
            ex.printStackTrace();
        } catch (InterruptedException ex) {
            ex.printStackTrace();
        }
    }
}

是否可以实现可以通过UDP调用的REST FARK。

是。(请参阅下文(

您可以通过UDP调用现有的Restful服务吗?

可能没有。当然不是没有很多工作。


实际上,使用HTTP或HTTP在TCP/IP连接上实施了典型的RESTFUL服务。不可能使用UDP直接与基于TCP的服务进行交谈。IP级数据包将具有错误的协议系列,并且该服务的操作系统不会将其路由到服务。

但是,(从技术上讲(有可能通过任何能够发送消息的运输来实施静止的服务。休息原则是运输方案的不可知论。

问题将是找到一个支持RESTFUL UDP (常规(RESTFUL http 同时

的服务框架。

还有其他几个实际问题:

  • udp不可靠,如果您发送不适合使用默认MTU(1500字节(的数据包的数据机,这将加剧。因此,如果您想通过UDP实施一个重新的服务,则需要密切关注请求和响应有效载荷的大小。

  • HTTPS使用TLS,以便客户端能够验证服务器的真实性,然后发送加密数据。UDP上的TLS是可能的(称为DTLS(,并由JCSE支持,但是在典型的Restful/HTTP框架中使用它可能具有挑战性。

如果您想进行此操作,请查找实现CoAP(约束应用程序协议-RFC 7252(和DTLS的重新框架。

您可能会查看可用的COAP实现,请参见COAP.TECHNOLOGY概述。尽管我是Java的CoAP/DTLS实施的Eclipse/Californium的委员会,但我建议尝试一下。

COAP还将交叉代理定义为HTTP。Google Cloud教程中有一个示例。它使用较旧的加州版本作为基础。加州本身具有更新代理exmaple(但不可用于Google Cloud的开箱即用(,请参见Californium -Proxy2。

是的,现在有一个Internet标准用于UDP上的休息,它的名称为受约束的应用程序prodocoal -coap。COAPP以RFC 7252开头的一系列互联网标准定义。

COAP解决了此问题的早期答案中提出的问题,包括使用UDP上的重传使其可靠,并使用DTLS提供安全性。

COAP已设计为在低至10 KIB RAM和100 KIB代码空间(RFC 7228(的微控制器上工作。此外,它使用4个字节的二进制固定标头和可变长度选项(例如可选的HTTP标头(

,它在UDP数据包中添加了很少的开销。

相关内容

  • 没有找到相关文章