JAVA socket 优化传输效率!!《求助》高手快来

问题描述

一个服务单一个客户端1.将服务器,和客户端都在本机上进行传输很快本机很快,1s可发几万次2.将服务器放到局域网内另一台linux机器,客户端放到windows上进行发送的时候就很慢将服务器放到局域网内另一台windows机器,客户端放到windows进行发送,发送效率一样慢客户端:while(true){一次发送的数据为(8+15)=23字节,write(23字节);等服务端得响应read(16字节);}服务端:while(true){接受,然后返回响应12+4=16的字节}客户端发送23字节,循环发送1000次,用时60s。将socketTcpNodelay设置为true后效率有所提升发送23字节,循环发送1000次,用时3s。settcpnodelay(true)我定位影响效率的原因是in.read()阻塞导致的.settcpnodelay(flase)即默认情况下每次read()耗时202ms左右,write()0mssettcpnodelay(true)即禁用negal算法,每次read()耗时1ms左右,write()1-3ms左右偶尔出现一次40ms的情况请教各位大侠,该如何优化,网络传输,read阻塞的情况啊是JVM虚拟机的对socket的网络发送,有限制??小弟先在此谢过!!

解决方案

解决方案二:
该回复于2011-04-25 09:22:55被版主删除
解决方案三:
想到两个思路:1.传统IO下设置Socket属性:客户端:setTcpNoDelay(true)setReceiveBufferSize(16)setSendBufferSize(23)setKeepAlive(true)setPerformancePreferences(1,2,0)服务器:setTcpNoDelay(true)setReceiveBufferSize(23)setSendBufferSize(16)setKeepAlive(true)setPerformancePreferences(1,2,0)2.使用NIOlz可以试一下,但是请把最后的结果贴出来哈,我这儿没有环境,只有一台本本
解决方案四:
好的,不好意思!来晚了!昨天也是没有环境...只能今天弄了待会就把测试结果贴上来
解决方案五:
引用楼主niejun111的回复:

一个服务单一个客户端1.将服务器,和客户端都在本机上进行传输很快本机很快,1s可发几万次2.将服务器放到局域网内另一台linux机器,客户端放到windows上进行发送的时候就很慢将服务器放到局域网内另一台windows机器,客户端放到windows进行发送,发送效率一样慢客户端:while(true){一次发送的数据为……

最新测试结果最新测试结果..settcpnodelay(flase)情况下在一次发送1536字节获取响应70字节循环一1000。。只需1500ms左右在发送<1500字节的时候获取响应70字节循环一1000。。竟然达到41000ms左右[点击查看原始大小图片]settcpnodelay(true)情况下在一次发送1536字节获取响应70字节循环一1000。。只需1500ms左右在发送<1500字节的时候获取响应70字节循环一1000。。只需800ms左右
解决方案六:
引用2楼leisore的回复:

想到两个思路:1.传统IO下设置Socket属性:客户端:setTcpNoDelay(true)setReceiveBufferSize(16)setSendBufferSize(23)setKeepAlive(true)setPerformancePreferences(1,2,0)服务器:setT……

最新测试结果..settcpnodelay(flase)情况下在一次发送1536字节获取响应70字节循环一1000。。只需1500ms左右在发送<1500字节的时候获取响应70字节循环一1000。。竟然达到41000ms左右settcpnodelay(true)情况下在一次发送1536字节获取响应70字节循环一1000。。只需1500ms左右在发送<1500字节的时候获取响应70字节循环一1000。。只需800ms左右
解决方案七:
该回复于2011-04-25 13:48:26被版主删除
解决方案八:
楼主这不对啊,怎么还带广告啊代码也木有给我们诶叼胃口叼胃口.......
解决方案九:
引用7楼clarck_913的回复:

楼主这不对啊,怎么还带广告啊代码也木有给我们诶叼胃口叼胃口.......

怎么可能有广告!!

时间: 2024-12-04 19:09:50

JAVA socket 优化传输效率!!《求助》高手快来的相关文章

java socket 开发,请高手指点,谢谢。

问题描述 java socket 开发,请高手指点,谢谢. 1.需要实现跟服务器进行客户数据的同步! 2.报文编码:GBK 3.请求报文格式: [192.168.1.189][01][张三][18651870425][重庆][xxxxx].... 这些是我需要传过去的参数 4.返回报文格式 [10054][01][张三][18651870425][重庆][重庆市江湖区...]. 我在网上看了很多socket 列子,都是: Socket client = new Socket("127.0.0.1

java socket 的参数选项解读(转)

  java socket中有很多参数可以选择,这篇博客的目的是沉淀出这些参数的语义和用法,供自己以后查阅. 1.java socket参数选项总览       在JDK1.6中有如下参数选项: 1 public final static int TCP_NODELAY = 0x0001; 2 3 public final static int SO_BINDADDR = 0x000F; 4 5 public final static int SO_REUSEADDR = 0x04; 6 7 p

Java性能优化[1]:基本类型 vs 引用类型

在Java性能优化系列中,内存管理是一个要优先考虑的关键因素.而说到内存分配,就必然会涉及到 基本类型和引用类型.所以我们今天就先来介绍一下这两种类型在性能方面各自有什么奥妙(关于这两 种类型在其它方面的奥妙,我会另外写一个帖子). ★名词定义 先明确一下什么是基本类型,什么是引用类型.简单地说,所谓基本类型就是Java语言中如下的8种 内置类型:boolean.char.byte.short.int.long.float.double.而引用类型就是那些可以通过 new来创建对象的类型(基本上

java socket多线程的时间问题

问题描述 java socket多线程的时间问题 各位大神你们好, 我正在用java写一个接收服务器数据并进行统计的程序, 我用的是多线程socket. 该程序要求能够每秒钟接收几千条数据, 数据中包含value和timestamp以及其他字段. 每个数据通过单独的连接发送, 接收之后统计每秒的钟数据的最大值与平均值(指的是数据中所含有的"value"字段的值), 并将其存储到本地. 但是使用多线程时我有个疑问, 就是怎么判断是否到了1秒. 如果使用本地时钟计算肯定会与服务器有出入,

高手快来啊,关于方法级别的事件订阅

问题描述 高手快来啊,关于方法级别的事件订阅 大家好,现在有这么一个需求,请教一下有没有好的实现办法. 需求描述: 1.ClassA产生事件,可能有多种类型,例如:订单创建.订单付款.订单评价...等. 2.有许多类需要知道ClassA产生的事件中的一种或多种类型.例如:ClassB想知道ClassA产生的订单创建.订单评价这两个事件. 3.应该怎么实现?我现在的做法是: Class A { List<ClassAListener> listeners = new ArrayList<&

利用java socket 写的一个联机的五子棋游戏,服务器端和客户端的问题,大神求教啊。。

问题描述 利用java socket 写的一个联机的五子棋游戏,服务器端和客户端的问题,大神求教啊.. 利用java socket 写的一个联机的五子棋游戏,一个服务器端的程序和两个玩家的客户端程序,可不可以都运行在同一台主机上啊? 我运行服务器端和其中一个玩家的客户端程序时,正常.但是运行第二个玩家的客户端程序时,就出现了 Java.net.BindExecption Address already in use: JVM_Blind. 的异常.怎么办? 还有我打算客户端把下的棋子的对象传给服

实时性-求助高手一个关于QT的问题

问题描述 求助高手一个关于QT的问题 我想用QT实现摄像机的实时采集和显示,用哪个控件显示图片实时性和效率最高,如果我用GraphicsView的话,我需要把图片直接以Stretch的方式显示,我不想用他自动生成的滚动条该咋整啊? 解决方案 可以结合OpenCV来做这个,看下这里:http://blog.csdn.net/llh318724/article/details/7007661 解决方案二: 对,就是按照楼上说的,qt里面使用opencv最快了

服务器-java socket 在外网和内网传输问题

问题描述 java socket 在外网和内网传输问题 今天写了一个java Socket的客户端和服务器端程序,在局域网环境中,客户端和服务端能够互相发送数据. 后来想把服务端的ip用Nat123映射出去,用客户端连接服务端映射出来的域名和端口结果服务端能接收客户端的数据,但客户端接收不了服务端的数据,本人百思不得其解,想请高手帮忙解答,本人感激不尽. 解决方案 楼主,我以前也和你做过同样的东西.当时我还研究了nat打洞.然而到最后我花了8块钱注册一个花生壳的内网版,结果就成了.而且其实自己映

关于java聊天室,求助

问题描述 关于java聊天室,求助 问题: 服务器端退出,线程却还在运行 报错: java.net.SocketException: Socket closed at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:152) at java.net.SocketInputStream.read(SocketInputStr