采用springboot netty 简单模仿微信聊天界面和功能。

系统模块:包括手机app端,后台服务端

技术架构:

手机app:Html5+,开发工具HBuilderX

后台服务:springboot + netty + mybatis ,开发工具IDEA

实现功能:用户注册、登录、用户主页(头像展示上传下载、昵称、账号、个人二维码生成展现、退出登录)、发现页面(朋友圈、添加好友、扫一扫)、通讯录、聊天功能等。

系统效果图如下:

1.首先是夜神模拟器模拟的安卓手机效果:

界面效果如下:

                   

IPhone 5s真机效果图如下:

         

项目结构如下

前端项目结构:

后端项目结构如下:

websocket服务主类:

package com.wechat.netty;import org.springframework.stereotype.Component;import io.netty.bootstrap.ServerBootstrap;
import io.netty.channel.ChannelFuture;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioServerSocketChannel;@Component
public class WSServer {private static class SingletionWSServer {static final WSServer instance = new WSServer();}public static WSServer getInstance() {return SingletionWSServer.instance;}private EventLoopGroup mainGroup;private EventLoopGroup subGroup;private ServerBootstrap server;private ChannelFuture future;public WSServer() {mainGroup = new NioEventLoopGroup();subGroup = new NioEventLoopGroup();server = new ServerBootstrap();server.group(mainGroup, subGroup).channel(NioServerSocketChannel.class).childHandler(new WSServerInitialzer());}public void start() {this.future = server.bind(9999);System.err.println("netty websocket server 启动完毕...");}
}

websocket初始化器:

package com.wechat.netty;import io.netty.channel.ChannelInitializer;
import io.netty.channel.ChannelPipeline;
import io.netty.channel.socket.SocketChannel;
import io.netty.handler.codec.http.HttpObjectAggregator;
import io.netty.handler.codec.http.HttpServerCodec;
import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;
import io.netty.handler.stream.ChunkedWriteHandler;
import io.netty.handler.timeout.IdleStateHandler;public class WSServerInitialzer extends ChannelInitializer<SocketChannel> {@Overrideprotected void initChannel(SocketChannel ch) throws Exception {ChannelPipeline pipeline = ch.pipeline();// websocket 基于http协议,所以要有http编解码器pipeline.addLast(new HttpServerCodec());// 对写大数据流的支持 pipeline.addLast(new ChunkedWriteHandler());// 对httpMessage进行聚合,聚合成FullHttpRequest或FullHttpResponse// 几乎在netty中的编程,都会使用到此hanlerpipeline.addLast(new HttpObjectAggregator(1024*64));// ====================== 以上是用于支持http协议    ======================// ====================== 增加心跳支持 start    ======================// 针对客户端,如果在1分钟时没有向服务端发送读写心跳(ALL),则主动断开// 如果是读空闲或者写空闲,不处理pipeline.addLast(new IdleStateHandler(8, 10, 12));// 自定义的空闲状态检测pipeline.addLast(new HeartBeatHandler());// ====================== 增加心跳支持 end    ======================// ====================== 以下是支持httpWebsocket ======================/*** websocket 服务器处理的协议,用于指定给客户端连接访问的路由 : /ws* 本handler会帮你处理一些繁重的复杂的事* 会帮你处理握手动作: handshaking(close, ping, pong) ping + pong = 心跳* 对于websocket来讲,都是以frames进行传输的,不同的数据类型对应的frames也不同*/pipeline.addLast(new WebSocketServerProtocolHandler("/ws"));// 自定义的handlerpipeline.addLast(new ChatHandler());}}

-----------------------------------------20191105--------------------------------------------------------------

查看微信发现微信有一个通知推送的功能(例如添加好友时会推送“添加好友的通知”到被添加用户的手机上并进行弹窗提示),于是今天抽空在项目中增加了该消息推送功能(使用的是第三方插件“个推”)。

流程:用户A扫描用户B的二维码,请求添加B为好友,则在B的手机上会接收到相应的通知,点击通知会直接跳转进入app首页。

效果如下(接收方即被添加用户):

            

示例代码如下:

public class GetuiPushToApp {/*** 获取应用基本信息*/private static String appId = "";private static String appKey = "";private static String masterSecret = "";private static String url = "http://sdk.open.api.igexin.com/apiex.htm";public static void send(String title, String text, String cid) throws Exception {IGtPush push = new IGtPush(url, appKey, masterSecret);NotificationTemplate template = getNotificationTemplate(title, text);SingleMessage message = new SingleMessage();message.setOffline(true);// 离线有效时间,单位为毫秒message.setOfflineExpireTime(24 * 3600 * 1000);message.setData(template);// 可选,1为wifi,0为不限制网络环境。根据手机处于的网络情况,决定是否下发message.setPushNetWorkType(0);Target target = new Target();target.setAppId(appId);target.setClientId(cid);//target.setAlias(Alias);IPushResult ret = push.pushMessageToSingle(message, target);if (ret != null) {System.out.println(ret.getResponse().toString());} else {System.out.println("服务器响应异常");}}

经过测试后发现系统仍然存在一些小问题,包括用户体验、聊天功能,后续有时间会逐步发现问题并完善问题!

说明:该项目是通过学习慕课大神课堂整理并修改,简单通过真机试运行测试,可用于学习。

源码download:仿微信聊天 (resourcecode.cn)

java 简单仿微信聊天(springboot)相关推荐

  1. 使用js实现的带输入状态的简单的仿微信聊天界面

    使用js实现的简单的仿微信聊天界面,实现固定的聊天回复功能,只能是固定的5句,但是回复的内容可以在代码的判断中进行修改. 实现的效果有:1.实现仿微信的聊天界面 2.实现仿微信的正在输入功能. 原理: ...

  2. php写的微信聊天界面,Android_Android高仿微信聊天界面代码分享,微信聊天现在非常火,是因其 - phpStudy...

    Android高仿微信聊天界面代码分享 微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先 ...

  3. android格式化时间中文版,Android 仿微信聊天时间格式化显示功能

    本文给大家分享android仿微信聊天时间格式化显示功能. 在同一年的显示规则: 如果是当天显示格式为 HH:mm 例:14:45 如果是昨天,显示格式为 昨天 HH:mm 例:昨天 13:12 如果 ...

  4. 高仿微信聊天界面长按弹框样式

    效果图 背景 在公司做的项目里面,刚好有需要用到微信聊天界面长按弹框样式这种UI的. 网上找了一下,没找到. Android现成的 ListPopupWindow又不能满足需求. 因此在非上班时间撸一 ...

  5. html仿微信评论输入框,简单仿微信朋友圈评论功能

    [实例简介] 简单实现了微信朋友圈评论的功能,被点击的评论能够随着输入框高度的改变而改变位置! [实例截图] [核心代码] 简单仿微信朋友圈评论 └── TalkInTalk ├── AndroidM ...

  6. android仿微信聊天功能,Android高仿微信聊天界面代码分享

    微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们 ...

  7. android 微信高仿,Android高仿微信聊天界面代码分享

    微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们 ...

  8. 基于Flutter的仿微信聊天应用

    前言   作为当下风头正劲的跨端框架,flutter成为原生开发者和前端开发者争相试水的领域,笔者将通过一个仿微信聊天的应用,展现flutter的开发流程和相关工具链,旨在熟悉flutter的开发生态 ...

  9. android高仿微信聊天消息列表自由复制文字,双击查看文本内容

    SelectTextHelper-高仿微信聊天消息列表自由复制文字,双击查看文本内容 掘金地址 github地址 SelectTextHelper打造一个全网最逼近微信聊天消息自由复制,双击查看文本内 ...

最新文章

  1. “数学不行,干啥也不行!”骨灰级程序员:其实你们都是瞎努力
  2. Java数据结构和算法:图
  3. 巧妙的 排序+去重——C语言
  4. JavaScript 禁用键盘按钮
  5. eclipse 中文件引用报错不能编译,但引用文件确实存在
  6. Spring中Bean的生命周期是怎样的
  7. 【快乐水题】1688. 比赛中的配对次数
  8. 去掉烦人的“正在配置Windows”
  9. 一行代码让matplotlib图表变高大上
  10. CVPR2021—SurFree:一个快速的无代替模型的黑盒攻击
  11. ie tab chrome_将IE Tab集成添加到Google Chrome
  12. 如何将png图像转换成jpg格式呢?
  13. java判断英文符号_Java判断中英文符号、标点的实现
  14. 锁定计算机按键精灵运行,最新按键精灵脚本代码大全 按键精灵命令运行方法...
  15. ES系列:查看所有索引及其状态
  16. 视频中有水印怎么去掉 如何去水印
  17. 240个Python练习案例附源码(百看不如一练)
  18. 基于java+springboot+mysql的高校运动会管理系统
  19. 【最新】2022年注册测绘师考试测绘案例分析真题及参考答案
  20. 视频网站建站程序CMS源码下载 (价值50元)

热门文章

  1. (一)STM32连上阿里云(附开源代码)
  2. VMware我已移动和复制区别
  3. 查看路由器的管理页面地址
  4. 【科研工具】博士师兄推荐的科研利器来咯!
  5. FLUENT算例 —— Vertical Axis Wind Turbine (Part 1) 垂直轴风力机(第1部分)
  6. Revit拼接线、放置视图参照
  7. 迅飞语音数字匹配阿拉伯数字或汉字
  8. 致web前端,听说你想创业?
  9. 服务器控制大屏显示,显示大屏唯瑞(Vewell)显示屏多种尺寸可定制,可交互式电子显示屏VewellV82-T17BL3...
  10. 浏览器的默认样式及去除