java 简单仿微信聊天(springboot)
采用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)相关推荐
- 使用js实现的带输入状态的简单的仿微信聊天界面
使用js实现的简单的仿微信聊天界面,实现固定的聊天回复功能,只能是固定的5句,但是回复的内容可以在代码的判断中进行修改. 实现的效果有:1.实现仿微信的聊天界面 2.实现仿微信的正在输入功能. 原理: ...
- php写的微信聊天界面,Android_Android高仿微信聊天界面代码分享,微信聊天现在非常火,是因其 - phpStudy...
Android高仿微信聊天界面代码分享 微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先 ...
- android格式化时间中文版,Android 仿微信聊天时间格式化显示功能
本文给大家分享android仿微信聊天时间格式化显示功能. 在同一年的显示规则: 如果是当天显示格式为 HH:mm 例:14:45 如果是昨天,显示格式为 昨天 HH:mm 例:昨天 13:12 如果 ...
- 高仿微信聊天界面长按弹框样式
效果图 背景 在公司做的项目里面,刚好有需要用到微信聊天界面长按弹框样式这种UI的. 网上找了一下,没找到. Android现成的 ListPopupWindow又不能满足需求. 因此在非上班时间撸一 ...
- html仿微信评论输入框,简单仿微信朋友圈评论功能
[实例简介] 简单实现了微信朋友圈评论的功能,被点击的评论能够随着输入框高度的改变而改变位置! [实例截图] [核心代码] 简单仿微信朋友圈评论 └── TalkInTalk ├── AndroidM ...
- android仿微信聊天功能,Android高仿微信聊天界面代码分享
微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们 ...
- android 微信高仿,Android高仿微信聊天界面代码分享
微信聊天现在非常火,是因其界面漂亮吗,哈哈,也许吧.微信每条消息都带有一个气泡,非常迷人,看起来感觉实现起来非常难,其实并不难.下面小编给大家分享实现代码. 先给大家展示下实现效果图: OK,下面我们 ...
- 基于Flutter的仿微信聊天应用
前言 作为当下风头正劲的跨端框架,flutter成为原生开发者和前端开发者争相试水的领域,笔者将通过一个仿微信聊天的应用,展现flutter的开发流程和相关工具链,旨在熟悉flutter的开发生态 ...
- android高仿微信聊天消息列表自由复制文字,双击查看文本内容
SelectTextHelper-高仿微信聊天消息列表自由复制文字,双击查看文本内容 掘金地址 github地址 SelectTextHelper打造一个全网最逼近微信聊天消息自由复制,双击查看文本内 ...
最新文章
- “数学不行,干啥也不行!”骨灰级程序员:其实你们都是瞎努力
- Java数据结构和算法:图
- 巧妙的 排序+去重——C语言
- JavaScript 禁用键盘按钮
- eclipse 中文件引用报错不能编译,但引用文件确实存在
- Spring中Bean的生命周期是怎样的
- 【快乐水题】1688. 比赛中的配对次数
- 去掉烦人的“正在配置Windows”
- 一行代码让matplotlib图表变高大上
- CVPR2021—SurFree:一个快速的无代替模型的黑盒攻击
- ie tab chrome_将IE Tab集成添加到Google Chrome
- 如何将png图像转换成jpg格式呢?
- java判断英文符号_Java判断中英文符号、标点的实现
- 锁定计算机按键精灵运行,最新按键精灵脚本代码大全 按键精灵命令运行方法...
- ES系列:查看所有索引及其状态
- 视频中有水印怎么去掉 如何去水印
- 240个Python练习案例附源码(百看不如一练)
- 基于java+springboot+mysql的高校运动会管理系统
- 【最新】2022年注册测绘师考试测绘案例分析真题及参考答案
- 视频网站建站程序CMS源码下载 (价值50元)