关于用java多线程做的一个多人聊天小程序的一个问题——如何实现进程间的通信?

Python013

关于用java多线程做的一个多人聊天小程序的一个问题——如何实现进程间的通信?,第1张

传统的进程通信的方式有大致如下几种:

(1) 管道(PIPE)

(2) 命名管道(FIFO)

(3) 信号量(Semphore)

(4) 消息队列(MessageQueue)

(5) 共享内存(SharedMemory)

(6) Socket

Java如何支持进程间通信。我们把Java进程理解为JVM进程。很明显,传统的这些大部分技术是无法被我们的应用程序利用了(这些进程间通信都是靠系统调用来实现的)。但是Java也有很多方法可以进行进程间通信的。

除了上面提到的Socket之外,当然首选的IPC可以使用Rmi,或者Corba也可以。另外Java nio的MappedByteBuffer也可以通过内存映射文件来实现进程间通信(共享内存)。

私聊功能跟你截屏的这段代码没有关系,首先你是多人聊天室,肯定要开连接池来解决线程问题,每个客户端都有自己对象创建的流,正常大家在公共聊天时,socket服务器向所有对象的流同一发送消息,当私聊时需要先找到对应对象的流,服务器单独向该流发送消息就可以实现私聊功能了。

建议你在创建对象时,将每个对象的昵称和流存入一个map集合,私聊时通过昵称来找到对应的流。

要用到多线程、socket通信、JMF多媒体框架,想做的好,还要考虑设计模式。

多人的实现,就是多个客户端连接服务器而已(就像很多人连接网游服务器打游戏一样),当有语音数据时,广播发给相关的客户端接收者。