HappyChat

Introduction: 基于 Netty 实现的 WebSocket 聊天室,支持几万人同时在线聊天
More: Author   ReportBugs   OfficialWebsite   
Tags:

基于 Netty 实现的 WebSocket 聊天室,实现的功能如下:

  1. 支持昵称登录;
  2. 支持多人同时在线;
  3. 同步显示在线人数;
  4. 支持文字和表情的内容;
  5. 浏览器与服务器保持长连接,定时心跳检测;

    服务器

    服务器端使用 Netty 作为通信框架,支持客户端通过 WebSocket 通信。服务器会检测链路是否处于空闲,如果 60 秒内没有收到客户端的任何消息,那么服务器会主动关闭该链路。

    为保证链路的可用性,服务器会定时发送 Ping 消息给客户端,客户端收到 Ping 消息后,必须回一个 Pong 消息响应,避免链路由于空闲而被关闭。

    客户端连接服务器之后,需要提供昵称给服务器,服务器保存每一个用户的昵称和相关的链路信息,用于后续的聊天显示。

    客户端发送聊天消息到服务器之后,服务器不会存储聊天消息,而是直接转发给其它的客户端。

    客户端

    由于是通过 WebSocket 协议来接入,所以浏览器作为客户端的话,必须支持 WebSocket 协议,现在项目中已经提供了 Html 页面的客户端,访问地址如下:
    http://chat.wolfbe.com
    在项目的 doc 文件夹下包含了客户端的 HTML 源码,有兴趣的童鞋可以参考一下。

    协议

    协议比较简单,所有的消息都一个 Json 字符串,格式如下:
    head | body | extend

  6. head 作为头部,用 int 类型存储,4 个字节;

  7. body 消息的有效载体,用 string 类型存储,长度无限度;
  8. extend 协议的扩展字段,用 map 类型存储;

    由于在解码消息时使用的是 Netty 自带的 WebSocket 的解码器,只支持文本帧的消息,解码出来的都是一个完整的帧消息,即上面格式的消息,所以协议上没有用长度字段。



交流

如果有兴趣交流 Netty 相关知识,可以加入Netty 联盟群:379119816

赞助

如果觉得项目还不错,想要表达些什么的话,可以上爱淘汇:http://itao.wolfbe.com 领淘宝天猫的优惠券,领取优惠券再下单可以省不少钱喔。你们使用这些优惠券购买东西时,我也可以得到一些佣金的,多谢支持!!!


Apps
About Me
GitHub: Trinea
Facebook: Dev Tools