java异步套接字故障排除

时间:2017-12-29 16:15:46

标签: java sockets asynchronous java-websocket

我用java用AsynchronousChannelGroup制作简单的聊天程序,但有些收到的数据还没有完成。或达到非常慢(1s~2s)。 (我认为它对客户来说是随机的。有些客户端可以很好地连接到服务器,但有些客户端达到非常慢并最终断开连接)

我尝试使用下面的代码获取数据回调方式

class socket
channel.read(readBuffer, this, new CompletionHandler<Integer, AsyncSocket>() {
    @Override
    public void completed(Integer size, AsyncSocket socket) {
        ByteBuffer read = socket.readBuffer;
        socket.callback.onRead(socket, read, read.limit() - read.position());
        read.compact();
        socket.channel.read(read, socket, this);
    }
    @Override
    public void failed(Throwable e, AsyncSocket socket) {
        // for close and output err
        socket.closeSoft(new Exception(e));
    }
});

class socket
public synchronized void write(ByteBuffer buffer) {
    try {
        while (buffer.hasRemaining()) {
            channel.write(buffer).get();
        }
    } catch (Exception e) {
        this.close(e);
    }
}

class callback //server
public void onRead(AsyncSocket socket, ByteBuffer readBuffer, int size) {
    // write every client using write() if all data transformed;
}

当我尝试访问时,某些客户端省略了回调,并且很长一段时间,错误&#34;信号量超时&#34;用closeSoft方法显示。

我认为发生的情况是随机的,我无法理解这个异常。请帮我。谢谢!

0 个答案:

没有答案