1

我正在使用Californium API ( https://github.com/eclipse/californium ) 使用 CoAP 协议发送数据。

下面是客户端和服务器的片段。

服务器 :

public class HelloWorldServer extends CoapServer {
    /*
     * Application entry point.
     */
    public static void main(String[] args) {
        try {
            // create server
            HelloWorldServer server = new HelloWorldServer();
            server.start();
        } catch (SocketException e) {
            System.err
                    .println("Failed to initialize server: " + e.getMessage());
        }
    }

    /*
     * Constructor for a new Hello-World server. Here, the resources of the
     * server are initialized.
     */
    public HelloWorldServer() throws SocketException {
        // provide an instance of a Hello-World resource
        add(new HelloWorldResource());
    }

    /*
     * Definition of the Hello-World Resource
     */
    class HelloWorldResource extends CoapResource {
        public HelloWorldResource() {
            // set resource identifier
            super("helloWorld");
            // set display name
            getAttributes().setTitle("Hello-World Resource");
        }

        @Override
        public void handleGET(CoapExchange exchange) {
            // respond to the request
            exchange.respond("Hello World!");
        }

        @Override
        public void handlePOST(CoapExchange exchange){
            //System.out.println("Start "+System.currentTimeMillis());
            exchange.accept();           
            //List<String> queries = exchange.getRequestOptions().getURIQueries();
        //    System.out.println("Text Received : "+ exchange.getRequestText().length());
        //    System.out.println("End "+System.currentTimeMillis());
            exchange.respond("Received");


        }
    }
}

客户端代码:

try {           

            long startTime = System.currentTimeMillis();
            for (int i = 0; i < 1000000; i++) {
                CoapClient client = new CoapClient(new URI("coap://192.168.15.170:5683/helloWorld"));
                CoapResponse response = client.post(str, 0);            

            }
            System.out.println("done");         
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }catch (Exception e) {
            e.printStackTrace();
        }

我正在发送1000000 条记录,但首先发送时它发送 65535 条记录并等待几秒钟。等待几秒钟后,它再次开始发送。

系统详情:

操作系统:Win 7 64 位。内存:4 GM

为什么在 65535 条记录后等待?

4

3 回答 3

1

顺便提一下:
16 位CoAP消息 ID 和大约 247 秒的默认交换寿命,
导致 250 msg/s。因此,这是CoAP RFC7252.

将其更改EXCHANGE_LIFETIME为较低的值可能会导致其他副作用。
实际上,如果在此之后(意外)重新接收到消息EXCHANGE_LIFETIME,则它违反了重复数据删除和/或 CON 消息传输。

CoAP并不是真的打算从一个流式传输数据power client。因此,我们专注于 Californium 开发以支持用例,其中许多客户端以适中的速率发送消息,从而为该用例带来高吞吐量。

于 2019-08-10T07:15:45.917 回答
0

我通过 Californium.CoAP 每秒接收 250 条记录。我添加了 4 毫秒的中继,因此它每秒发送的记录少于 250 条。

如果您将数据从不同的机器发送到相同的 CoAP 服务器资源,您需要相应地管理延迟。

CoAP 消息 ID (MID) 范围仅为 1-65565。

还要正确配置Californium.properties以使其正常工作。

于 2015-04-02T04:57:24.230 回答
0

在我的情况下,每分钟从单个客户端接收超过 60k 条消息,减少 californium.properties(或 NetworkConfig,如果您愿意)中的 EXCHANGE_LIFETIME 是有效的。

于 2019-08-06T04:54:05.130 回答