一个消息服务器的设计及实现中的问题,高手请进
前几天开发了一个消息服务器,可以实现PTP方式的通信,经过性能压力测试,都还比较满意,但是后来想到一个问题,目前还没有找到好的解决方法,特来请教大家,望诸位高手不吝赐教!!!
我得消息服务器是以队列方式组织的,在程序启动是可以根据配置文件建立多个队列。服务器通过ServerSocket提供服务,能够接入客户端的连接。
每个客户Socket第一次接进来的时候,先发送一条注册消息,表名自己所要连接的队列,以及是要从该队列接收或是要向该队列发送消息。服务器每次发现有客户Socket接入,就会根据它的注册消息,把它作为Sender或者Receiver绑定到相应的队列。
服务器上每个队列都配有两个线程,一个线程用来监听该队列的Sender,一旦有消息写入,就将该消息填入队列,另一个线程不停轮询队列长度,一发现队列中有消息,并且该队列的Receiver!=null,就向该Receiver发送队列中的消息。
现在的问题是:检测队列长度并发送消息的线程,是跟据队列当前长度和Receiver是否为null来判断是否要向Receiver发送消息的,这样的话,如果一个作为Receiver的客户端仅仅是接进来,但是并没有发出read请求的时候,队列中的消息就已经被写进它的InputStream里了。比如,某个Sender向队列TEST1发送了100条消息,然后退出;接着又一个Receiver连到队列TEST1上,但是并未发出receive消息的请求就断开了,这时,就会一些消息被写入该Receiver,并且从队列中删除,这样就会造成消息损失,比如这时另有个客户Socket接进来向TEST1队列请求接收消息,它就只能接收不到100条的消息。
不知道各位有没有什么好的方法来解决这个问题,这里先谢过了!