Giter Club home page Giter Club logo

chat's Introduction

Java基于多线程和NIO实现聊天室

  • 涉及到的技术点

    • 线程池ThreadPoolExecutor
    • 阻塞队列BlockingQueue,生产者消费者模式
    • Selector
    • Channel
    • ByteBuffer
    • ProtoStuff 高性能序列化
    • HttpClient连接池
    • Spring依赖注入
    • lombok简化POJO开发
    • 原子变量
    • 内置锁
    • CompletionService
    • log4j+slf4j日志
  • 实现的功能

    • 登录注销
    • 单聊
    • 群聊
    • 客户端提交任务,下载图片并显示
    • 上线下线公告
    • 在线用户记录
    • 批量下载豆瓣电影的图片,并打为压缩包传输给客户端
  • 客户端使用方式:

    • 登录:默认用户名是user1-user5,密码分别是pwd1-pwd5
      • 例:打开客户端后输入用户名为user1,密码为pwd1
    • 注销:关闭客户端即可
    • 单聊:@username:message
      • 例:@user2:hello
    • 群聊:message
      • 例:hello,everyone
    • 提交任务:task.file:图片的URL / task.crawl_image:豆瓣电影的id[?imageSize=n] 可以加请求参数
  • 假设用户输入都是符合格式的

  • 尽可能提高程序的健壮性,对各种异常情况进行处理

  • 不得不承认的是,客户端做的很粗糙,主要开发目的还是练习Java的多线程和NIO

chat's People

Contributors

songxinjianqwe avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

chat's Issues

[BUG]消息丢失

while ((size = client.read(buf)) > 0) {
                    buf.flip();
                    baos.write(buf.array(), 0, size);
                    buf.clear();
 }

在ReadEventHandler中,TCP可能粘包,此处baos存入的可能是多条消息的字节流,反序列化会导致客户端到达的部分消息丢失。(在ReadEventHandler中sleep一下就能看到此bug)

How to deploy this project?

How to deploy this project?
Already imported this project to Intellij Idea, and then what should I do?

Thank you!

ChatClient报错

我把项目导入到idea里面去,发现ChatClient.java这个里面找不到.builder()这个方法,是缺少什么包吗?

hello,发送消息报错,能沟通下不

java.io.IOException: 你的主机中的软件中止了一个已建立的连接。
at sun.nio.ch.SocketDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:65)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:469)
at cn.sinjinsong.chat.server.handler.message.MessageHandler.broadcast(MessageHandler.java:29)
at cn.sinjinsong.chat.server.handler.message.impl.BroadcastMessageHandler.handle(BroadcastMessageHandler.java:33)
at cn.sinjinsong.chat.server.ChatServer$ReadEventHandler.run(ChatServer.java:214)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.