Netty学习——实战篇2 NIO 群聊系统(简单版)

        需求:

        1、编写一个NIO群聊系统,实现服务端和客户端之间数据简单通讯(非阻塞)

        2、实现多人群聊

        3、服务端:可以监测用户上线、离线、并实现消息转发功能。

        4、客户端:通过channel可以无阻塞发送消息给其他所有用户,同时可以接受其他用户发送的消息。

        5、目的:进一步理解NIO非阻塞网络编程机制

        服务端代码:GroupChatServer.java

@Slf4j
public class GroupChatServer {
    //选择器
    private Selector selector;
    //监听器
    private ServerSocketChannel serverSocketChannel;
    //端口号
    private static final  int PORT = 8000;
    //构造方法,初始化成员变量
    public GroupChatServer(){
        try {
            //1 创建监听器
            serverSocketChannel = ServerSocketChannel.open();
            //2 创建选择器
            selector = Selector.open();
            //3 绑定端口号
            serverSocketChannel.socket().bind(new InetSocketAddress(PORT));
            //4 设置非阻塞模式
            serverSocketChannel.configureBlocking(false);
            //5 事件绑定
            serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT);
        }catch (Exception e){
            e.printStackTrace();
        }

    }

    //监听
    public void listen(){
        log.info("监听的线程号是:{}",Thread.currentThread().getId());
        try {
            //循环等待客户端连接
            while(true){
                int count  = selector.select();
                if(count > 0){
                    //表示有客户端连接
                    //遍历得到selectorKey
                    Iterator<SelectionKey> iterator = selector.selectedKeys().iterator();
                    while(iterator.hasNext()){
                        SelectionKey key = iterator.next();
                        //判断事件监听类型
                        if(key.isAcceptable()){
                            /*//事件:连接
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

geminigoth

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值