Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
只在java套接字中为基于回合的android游戏编写网络代码是个坏主意吗?_Android_Multithreading_Sockets_File Io_Serversocket - Fatal编程技术网

只在java套接字中为基于回合的android游戏编写网络代码是个坏主意吗?

只在java套接字中为基于回合的android游戏编写网络代码是个坏主意吗?,android,multithreading,sockets,file-io,serversocket,Android,Multithreading,Sockets,File Io,Serversocket,起初,我想使用一个播放器所在的插座 向服务器发送请求,服务器处理该请求并发送回复。或者玩家可能需要每隔一段时间发送一次游戏状态更改查询 这是最糟糕的主意吗 第二个问题与服务器端代码有关。目前,每个传入连接都会产生一个新线程来运行其任务,主要是读取硬盘上的一些文件,并将字符串发送回请求它的android设备作为响应 但我想知道可伸缩性。例如,假设一百万玩家每分钟打开一个套接字线程,持续10秒。在任何给定的时间都可能有20000个并发线程在运行,并且需要使用硬盘驱动器文件IO进程 如果这显然是不现实

起初,我想使用一个播放器所在的插座

向服务器发送请求,服务器处理该请求并发送回复。或者玩家可能需要每隔一段时间发送一次游戏状态更改查询

这是最糟糕的主意吗

第二个问题与服务器端代码有关。目前,每个传入连接都会产生一个新线程来运行其任务,主要是读取硬盘上的一些文件,并将字符串发送回请求它的android设备作为响应

但我想知道可伸缩性。例如,假设一百万玩家每分钟打开一个套接字线程,持续10秒。在任何给定的时间都可能有20000个并发线程在运行,并且需要使用硬盘驱动器文件IO进程


如果这显然是不现实的,你有什么建议?谢谢,对不起,我以前从来没有尝试过网络之类的东西

我建议使用线程池:

有了它,您不必不断地创建和销毁线程,但许多线程总是在那里,坐着等待任务。这将避免创建和销毁线程的开销

关于IO,您希望避免同时从多个线程读取同一磁盘,因为这将导致硬盘浪费时间从一个位置查找到另一个位置。 我将通过实现一个类来解决这个问题,该类可以连续地管理文件读取。您的每个线程都可以向该类发出读取特定文件的请求,并提供一个回调方法,以便在读取该文件后调用。在您的回拨中,您可以处理该文件并将响应发送回手机。这还将确保您不会在两个线程中意外写入同一文件

此答案显示了如何使用回调实现任务:


希望它有帮助。

即使只做一个简单的游戏,我也会考虑使用一个消息代理。它增加了网络流量和软件包开销,但它是一个令人难以置信的灵活和可扩展性

查看消息传递中的请求-应答模式:

查看此特定代理的RPC和主题教程:

您可以向特定客户机订阅exchange上的任何主题,并且可以在运行时更改这些主题。我想象客户寻找游戏,然后将其移动到一个独特的顶部或顶部


<>我意识到它是没有目的的,但它认为它比TCP/IP更为现代的TCP/IP抽象层。你想做的很多事情都已经完成了,你会有更多的时间做有趣的事情

这听起来总的来说是一个好的做法。你知道一个20000个线程的线程池是否可以同时执行与硬盘驱动器相关的任务吗?主要是阅读文本文件。或者如果IO的速度会阻塞所有用户的一切。我编辑了我的原始帖子来回答这个问题。如果手机发送请求,它会被扔到硬盘任务的序列化列表中。信息被读取或写入,回调处理该信息。TCP套接字(线程)是否可以保持打开状态,等待响应?最后,这仍然需要数以万计的线程等待最终检索和处理的响应。在等待HD I.O时,服务器上打开了这么多线程/套接字,这是不是很糟糕?谢谢