Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.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服务器客户机模型_Java_Model_Client Server - Fatal编程技术网

Java服务器客户机模型

Java服务器客户机模型,java,model,client-server,Java,Model,Client Server,这个问题更关心程序的总体设计。我手头有一个问题,中心与一组客户单独通信(客户之间不直接交互) 中心和客户之间的通信内容完全是数字的,即来回发送一组数字。客户机在单独的计算机上运行,中心可以托管在另一台计算机上(或以其他方式)。通信方式是迭代和同步的,即中心向每个客户发送请求/问题消息,客户的用户在每次迭代的时间限制内向中心提供答案/回复,并且这种交互重复多次,直到结束 该中心根据从客户处收到的答复进行一些计算,客户只需为该计算提供输入 我想知道使用Java解决这个问题的优雅设计是什么?如有任何意

这个问题更关心程序的总体设计。我手头有一个问题,中心与一组客户单独通信(客户之间不直接交互)

中心和客户之间的通信内容完全是数字的,即来回发送一组数字。客户机在单独的计算机上运行,中心可以托管在另一台计算机上(或以其他方式)。通信方式是迭代和同步的,即中心向每个客户发送请求/问题消息,客户的用户在每次迭代的时间限制内向中心提供答案/回复,并且这种交互重复多次,直到结束

该中心根据从客户处收到的答复进行一些计算,客户只需为该计算提供输入

我想知道使用Java解决这个问题的优雅设计是什么?如有任何意见或建议,我们将不胜感激。非常感谢

听起来这本书很适合你。这是一本书


祝你好运和好运。

纯Java中最简单的解决方案可能是使用RMI。只需通过RMI公开一个对象,并让客户端远程调用该对象上的方法

如果您想要异步行为,您可以使用JMS实现,或者如上所述使用套接字和TCP/IP实现您自己的


如果你不喜欢这些,上面提到的MPI可能适合你。或者可能是为您准备的。

我会使用它通过RMI调用(远程方法调用)高效地序列化您的数据集。我自己使用,效果很好。有UDP和TCP,没有任何混乱。从站点上的示例开始,然后从那里开始工作。使用RMI,您可以轻松地使连接的双方都工作。

有哪些因素阻止您保持连接的简单性--一些基本的TCP/IP通信?您是否希望重用现有库?试图与大量客户沟通?您对发现服务器地址方面感兴趣吗?容错性?最重要的是什么——有效的资源利用率/延迟/吞吐量?中心是否有必要启动通信?服务器通常有一个由客户端调用的服务。您如何描述您的体系结构,将您的客户机转换为服务器(他们必须侦听请求),将您的中心转换为客户机。@Dilum Ranatunga:考虑到应用程序的上下文,我实际上希望尽可能简单。客户端的数量根本不多-一次最多将有10个客户端连接到服务器。你能详细介绍一下TCP/IP的实现吗?@Puce:也许我应该澄清一下,该中心不会调用任何在客户端编程的服务。这更像是中心问一个问题(由算法导出),然后发送给客户机,客户机回复使用客户机与中心交互的用户提供的答案。您描述的仍然是一种服务:客户机(此处为中心)问一个问题,然后发送给服务器(此处为客户机)。服务器(这里是客户端)侦听传入的问题并提供响应。“监听”部分将客户端转换为服务器。嗨,克里斯,我已经看了KryoNet。它看起来很有希望,但是它的首页上简单的例子在说明它的功能方面是相当基本的。特别是,我想知道基于KryoNet的服务器如何处理(并且能够识别)多个连接的客户端。在这里,标识是关键,因为对于不同的客户端,服务器的行为可能不同。谢谢。该标识将由持有OID为0的登录对象的服务器启动,客户端将连接到该对象。客户端将调用服务器上具有所需角色的登录方法。如果成功,服务器将在此登录功能中创建一个对象,该对象允许客户端与服务器交互,并将存储该对象并返回一个包含交互对象信息(服务器对象ID、客户端对象ID)的对象。客户机和服务器的对象将根据客户机类型进行定制。因此,服务器使用客户机与之交互的对象(由服务器创建)来有效地识别客户机?我可以假设这些对象根据交互客户端的不同行为吗?但是第二个对象“包含交互对象信息(服务器对象ID、客户端对象ID)”的目的是什么?你能举个简单的例子吗?谢谢。服务器有一个递增的oid计数器,它存储并用作自己的ID。计数器再次递增以生成客户端oid。两个oid都被发送,客户端在存储服务器对象oid的同时采用给定的oid作为其对象。从服务器发送和客户端接收时,需要在两端适当注册这两个ID。根据远程连接信息,可以在客户端和服务器上确定远程对象的类型。您应该在类中使用“getRemoteClass(Connection c)”函数或类似函数,这些函数可以被重写。