如何发送1kb大小的消息java

时间:2013-03-23 20:08:46

标签: java

我如何在java中发送1kb消息,我试图将消息从一台机器发送到另一台机器,固定大小为1kb,如何实现?

目前我可以在机器之间发送诸如“测试”之类的消息,但理想情况下我希望能够发送1kb的固定大小消息

这就是我目前正在发送测试的方式

   if (myrank == 0) {
    char[] mess = " test ".toCharArray();
    MPI.COMM_WORLD.Send(mess, 0, mess.length, MPI.CHAR, 1, 99);
} 

目前这就是我在机器之间发送消息的方式:

import mpi.* ;

class Hello {

  static public void main(String[] args) {
    MPI.Init(args);
int myrank = MPI.COMM_WORLD.Rank();
long startTime = System.currentTimeMillis();
if (myrank == 0) {
    char[] mess = " test ".toCharArray();
    MPI.COMM_WORLD.Send(mess, 0, mess.length, MPI.CHAR, 1, 99);
} else {
    char[] mess = new char[20];
    MPI.COMM_WORLD.Recv(mess, 0, 20, MPI.CHAR, 0, 99);
    System.out.println("received:" + new String(mess));
}

long endTime = System.currentTimeMillis();
long duration = endTime - startTime;
System.out.println(duration);
    MPI.Finalize();
  }
}   

字节数组是一个很好的解决方案吗?

需要固定大小的消息,以帮助基准测试结果,例如我希望比较发送1kb消息所需的时间增加,1mb,20mb ........ 1gb等

编辑:

这会有用吗?这会发送8位吗?

int i = 10;  

String text = String.format("%08d", i);  
// text now contains "00000010"  
// 8 bits

2 个答案:

答案 0 :(得分:1)

如果要发送1kb消息,请创建大小为1kb的消息并发送。

import mpi.* ;

class Hello {

    static public void main(String[] args) {

        MPI.Init(args);
        int myrank = MPI.COMM_WORLD.Rank();
        int tag = 99;

        long startTime = System.currentTimeMillis();
        if (myrank == 0) {
            char[] mess = new char [1024];
            MPI.COMM_WORLD.Send(mess, 0, mess.length, MPI.CHAR, 1, tag);
        } else if (myrank == 1) {
            char[] mess = new char[1024];
            MPI.COMM_WORLD.Recv(mess, 0, 1024, MPI.CHAR, 0, tag);
            System.out.println("received:" + new String(mess));
        }

        long endTime = System.currentTimeMillis();
        long duration = endTime - startTime;
        System.out.println(duration);
        MPI.Finalize();
    }
}

更好的是,测量乒乓延迟,这是更好的定义(往返返回时间),并使用几个长度:

import mpi.* ;

class Hello {

    static public void main(String[] args) {

        MPI.Init(args);
        int myrank = MPI.COMM_WORLD.Rank();
        int tag = 99;
        int maxlen = 512*1024*1024;
        int minlen = 64;
        char [] sendbuff = new char [maxlen];
        char [] recvbuff = new char [maxlen];


        if (myrank == 0) {
            for (int len = minlen; len < maxlen; len *= 4) {
                long startTime = System.currentTimeMillis();                    
                 MPI.COMM_WORLD.Send(sendbuff, 0, len, MPI.CHAR, 1, tag);
                 MPI.COMM_WORLD.Recv(recvbuff, 0, len, MPI.CHAR, 1, tag);
                long endTime = System.currentTimeMillis();
                long duration = endTime - startTime;
                System.out.println("Ping-pong time for " + len + " is " + duration);
            }
        } else if (myrank == 1) {
            for (int len = minlen; len < maxlen; len *= 4) {
                 MPI.COMM_WORLD.Recv(recvbuff, 0, len, MPI.CHAR, 0, tag);
                 MPI.COMM_WORLD.Send(recvbuff, 0, len, MPI.CHAR, 0, tag);
            }
        }


        MPI.Finalize();
    }
}

答案 1 :(得分:0)

在发送(发起)侧使用Socket,在接收(侦听消息)侧使用ServerSocket。 Socket允许打开输出流,ServerSocket可以生成另一个Socket,您可以在其中打开输入流。如果消息是固定大小,则没有太大区别。

你也可以使用SOAP,RMI,Protocol Buffers,CORBA,MPI等谷歌。这些将增加更多的复杂性,但也增加了功能性,并且每个应用领域都很强大。