使用套接字(JAVA)在客户端和服务器之间传输HashMap

时间:2010-03-02 22:56:35

标签: java sockets client-server distributed

我正在开发一个JAVA项目,其中有多个终端。这些终端充当客户端和服务器。例如,如果有3个终端A,B和C.那么在任何给定的时间点,其中一个说A,将是客户端发出广播请求。其他两个终端B和C将回复。我正在使用套接字让它们进行通信。一旦从所有其他终端A收到回复,A将检查频道池以查看该频道中的任何一个是否空闲。它占用了免费频道并使其可用性错误。

使用HashMAp实现channelpool:

HashMap channelpool = new HashMap();

channelpool = 1 = true,2 = true,3 = false,4 = true,5 = true,6 = true,7 = true,8 = true,9 = true,10 = true

所以最初所有频道都是真的,任何终端都可以接收任何频道。但是一旦获取了通道,它在使用期间被设置为false,然后重置为true。

现在必须在分布式终端之间共享此Hashmap。它也应该保持最新。我不能在终端之间使用共享资源来存储HashMap。有人告诉我一种在终端之间传输HashMap的简单方法。 如果有人能指出我讨论这个问题的网站,我将不胜感激。

3 个答案:

答案 0 :(得分:3)

您的问题比通过Socket发送HashMap要早得多。您如何确保一次只有一个进程修改地图?如果两个流程修改了地图,那么如何以相同的方式为每个流程整合更改?

但是要回答你的问题:使用java.io.ObjectOutputStream序列化HashMap,然后使用ObjectInputStream在另一侧重构它,应该可以解决问题。

答案 1 :(得分:1)

完全。传输HashMap会遇到与您尝试使用它解决的相同的并发问题,因此它不是解决方案。相反,它是问题的一部分,也是不必要的部分。您需要一个中央服务器来管理您的分配,您可以通过RMI实现分配,或者更可能是数据库而不是HashMap。

答案 2 :(得分:0)

无需RMI或对象序列化。您的服务器应该有Hazelcast distributed map。您的客户端JVM应使用Hazelcast Client来访问共享的分布式映射。客户端可以侦听分布式地图事件。

Hazelcast是Java的地图,多图,队列,主题,锁和执行器服务的开源(Apache许可证),事务性,分布式实现。