我最近开始开发一个密集使用网络的应用程序.第一次使用RMI尝试,由于几个原因,我们切换到纯套接字.但是,当通过网络或甚至在localhost上测试套接字时,我们降低到25个请求/秒的速率.使用RMI时,它高出两个数量级.
通过更多测试,我们获得了以下(对于localhost):
这是客户端代码:(服务器端只回复"ACK")
public static void main(String[] args) throws IOException, ClassNotFoundException
{
Socket kkSocket = null;
ObjectOutputStream out = null;
ObjectInputStream in = null;
kkSocket = new Socket("barium", 4444);
out = new ObjectOutputStream(kkSocket.getOutputStream());
in = new ObjectInputStream(kkSocket.getInputStream());
long throughput;
long millis;
TcpRequest hello = null;
throughput = 0;
millis = System.currentTimeMillis();
while (System.currentTimeMillis() < millis + 1000)
{
hello = new TcpRequest();
hello.service = "hello";
hello.payload = Math.random();
throughput++;
}
System.out.println("-------------------------------------------------------");
System.out.println("| Objects created: " + (throughput) …Run Code Online (Sandbox Code Playgroud) 继我上一期的问题之后:
我正在研究Linux上的套接字性能.通过上面的例子,我的往返时间约为65μsec.如果我在文件系统上制作两个fifo,则会下降到~45μsec.使用localhost套接字的额外时间必须是因为我正在访问网络堆栈.
是否有一些操作系统配置可以使localhost套接字与命名管道一样快?
uname -a
Linux fiatpap1d 2.4.21-63.ELhugemem #1 SMP Wed Oct 28 23:12:58 EDT 2009 i686 athlon i386 GNU/Linux
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我目前在使用OutputStream的客户端 - 服务器应用程序中使用Java套接字而不是BufferedOutputStream(对于输入流也是如此).
客户端和服务器交换序列化对象(writeObject()方法).
在这种情况下使用BufferedOutputStream和BufferedInputStream是否有意义(更快)?
当我必须刷新或者我不应该写一个flush()语句?