0

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

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

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

当我按下按钮时,数据使用套接字发送到服务器。服务器处理信息(非常快),并将更新的数据发送给这个用户和他的对手。在 Android 端,我创建了两个AsynTasks. 一个总是监听来自服务器的可能的新数据,另一个在用户做某事时向服务器发送数据。

最后一个问题是不同设备更新之间的时间差异。我的意思是,新数据将在其中一台设备上提前 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;

我认为我可以将其减少到 4 个整数和 2 个字符串和几个布尔值。会不会有区别?这值得么?

这是我在双方发送的课程。真的,我不需要在双方发送相同的数据。所以,我需要发送到服务器的数据非常小。

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

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

4

0 回答 0