Java 安卓,如何在带有套接字的网络区域提高性能?

Java 安卓,如何在带有套接字的网络区域提高性能?,java,android,performance,sockets,Java,Android,Performance,Sockets,我正在开发一个学习Android的实时游戏。我正在使用Tomcat和WebService在游戏开始时交换一些数据。我用的是插座。这两款Android设备都可以通过带有Java进程的套接字交换信息,Java进程可以是我的服务器。有时他们必须发送信息,有时他们从服务器获取信息 我已经使用WiFi和3G进行了检查。令我惊讶的是3G速度有多慢!所以,我不知道我的编程是否正确。我确实很懒,我重用了一个类来发送可能更小的数据。这会有很大的不同吗?它有大约10个字符串和5个整数。可能是。。。5.真的,我不认为

我正在开发一个学习Android的实时游戏。我正在使用Tomcat和WebService在游戏开始时交换一些数据。我用的是插座。这两款Android设备都可以通过带有Java进程的套接字交换信息,Java进程可以是我的服务器。有时他们必须发送信息,有时他们从服务器获取信息

我已经使用WiFi和3G进行了检查。令我惊讶的是3G速度有多慢!所以,我不知道我的编程是否正确。我确实很懒,我重用了一个类来发送可能更小的数据。这会有很大的不同吗?它有大约10个字符串和5个整数。可能是。。。5.真的,我不认为这个东西太重。另一件事是这个对象实现了Serializable,我读到有另一个接口我可以实现,如果你使用Android,它会更好,但是我也使用Java,所以我不知道它是否只是在你使用Android的时候。我认为它被称为
Parcelable

我试图做一些接近实时的事情,从单击按钮到服务器返回数据,我等待了大约4-6秒

当我按下按钮时,数据通过套接字发送到服务器。服务器处理信息(非常快),并将更新的数据发送给该用户及其对手。在Android方面,我创建了两个
AsynTask
s。其中一个总是从服务器监听可能的新数据,另一个则在用户执行某些操作时向服务器发送数据

最后一个问题是不同设备更新之间的时间差异。我的意思是,新数据在其中一台设备上提前2秒到达。可以同步这个吗?我猜这是因为网络的质量不同,所以我猜这可能很难。但是,我该如何改进这方面呢

更新:

嗯,我要尝试一点代码,但是,代码太多了

好吧,我认为这是我的第一个错误,我发送的类太大了,因为我试图将该类重新用于脱机模式和联机模式

该类看起来像:

/**
 * 
 */
private static final long serialVersionUID = -2849406755758020431L;
private List<Word> listWords;
private long numberWords;

private int score1; 
private int score2;

//OffLine
private int lifes;
private int numWordsNextLevel;
private int speedTime;
private int level;
private int difficult;

//Online
private String message;
private int numPlayers;
private int numWordsGame;
private String namePlayer1;
private String namePlayer2;


//Flags players
private boolean player1failed;
private boolean player2failed;
/**
* 
*/
私有静态最终长serialVersionUID=-2849406755758020431L;
私有列表词;
私人长字词;
私人机构1;
私家侦探2;
//离线
私人生活;
私有int numWordsNextLevel;
私人时间;
私有整数级;
私人智力困难;
//在线
私有字符串消息;
私人雇员;
私人国际货币基金组织;
私有字符串名称player1;
私有字符串名称player2;
//旗手
私有布尔播放器1失败;
私有布尔播放器2失败;
我想我可以把它减少到4整数,2个字符串和几个布尔值。有什么不同吗?值得吗

这是我两边都要送的课程。真的,我不需要在两边发送相同的数据。因此,我需要发送到服务器的数据非常小

关于UDP或TCP,当我丢失数据包时会发生什么情况??人们通常做什么来改进它?UDP比TCP快多少?我知道你不必发送ACK,但是,我真的不知道协议的这一部分需要多少时间


我一直在用DDMS检查我发送了多少数据,每次大约1-1.5Kbytes,我不认为这太多,我将创建一个特定的类来交换数据,但是,有更多的建议吗?

这个问题太模糊了,以目前的形式无法回答。你能让它更具体一些,并展示一些你用来交换数据的代码吗?你应该使用Android的svelt日志系统来实现实际的指标。当您发送数据请求、通过什么服务以及何时收到响应时,记录日志。还要注意的是,在三个节点(两个设备和您的服务器)之间进行同步可能会涉及大量的阻塞和延迟,因此无法获得您想要的实时感觉。这是一个广泛的话题:你应该明确你当前的障碍。一个提示是,你不想使用http这样的东西,因为它使用TCP,而且速度太慢。使用UDP。@Mattwole
UDP
的问题是不能保证收到数据包,因为在收到数据包后没有应答-因此,如果数据包丢失,您可以永远等待…您可以很容易地解决这个问题,在客户端设置一个计时器,如果它过期,告诉服务器重新发送。。使用数据包编号进行同步。