Netty 系列八(基于 WebSocket 的简单聊天室).
2018-09-10 13:21
781 查看
一、前言
之前写过一篇 Spring 集成 WebSocket 协议的文章 —— Spring消息之WebSocket ,所以对于 WebSocket 协议的介绍就不多说了,可以参考这篇文章。这里只做一些补充说明。另外,Netty 对 WebSocket 协议的支持要比 Spring 好太多了,用起来舒服的多。
WebSocket 以帧的方式传输数据,每一帧代表消息的一部分。一个完整的消息可能会包含许多帧。
由 IETF 发布的 WebSocket RFC,定义了 6 种帧, Netty 为它们每种都提供了一个 POJO 实现。下表列出了这些帧类型,并描述了它们的用法。
public class ChatServer { private final ChannelGroup channelGroup = new DefaultChannelGroup(ImmediateEventExecutor.INSTANCE); private final EventLoopGroup group = new NioEventLoopGroup(); private Channel channel; public ChannelFuture start(InetSocketAddress address) { ServerBootstrap bootstrap = new ServerBootstrap(); bootstrap.group(group) .channel(NioServerSocketChannel.class) .childHandler(new ChatServerInitializer(channelGroup)); ChannelFuture channelFuture = bootstrap.bind(address); channelFuture.syncUninterruptibly(); channel = channelFuture.channel(); return channelFuture; } public void destroy() { if (channel != null) { channel.close(); } channelGroup.close(); group.shutdownGracefully(); } public static void main(String[] args) { final ChatServer chatServer = new ChatServer(); ChannelFuture channelFuture = chatServer.start(new InetSocketAddress(9999)); // 返回与当前Java应用程序关联的运行时对象 Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { chatServer.destroy(); } }); channelFuture.channel().closeFuture().syncUninterruptibly(); } }ChatServer.java
三、效果展示
[p] 在浏览器中输入 http://127.0.0.1:9999 即可看到预先准备好的 index.html 页面;访问 ws://127.0.0.1:9999/ws (可随意找一个 WebSocket 测试工具测试)即可加入聊天室。 [/p]有点 low 的聊天室总算是完成了,算是 Netty 对 HTTP 协议和 WebSocket 协议的一次实践吧!虽然功能欠缺,但千里之行,始于足下!不积硅步,无以至千里;不积小流,无以成江海!
参考资料:《Netty IN ACTION》
演示源代码:https://github.com/JMCuixy/NettyDemo/tree/master/src/main/java/org/netty/demo/chatroom
相关文章推荐
- Netty结合WebSocket实现简单网页聊天室
- websocket聊天室,简单版本,基于swoole
- 基于node的websocket学习笔记二:一个简单的聊天室程序与优化方案
- 基于.NET 的WebSocket 的简单实例 --- 在线聊天室
- 基于WebSocet简单聊天室(NodeJS + node-websocket-server)
- 基于Netty实现的简单聊天室(GUI版)
- 基于HTML5和Tomcat WebSocketServlet的聊天室简单实现
- websocket 入门系列:三 netty实现简单聊天
- 基于WebSocet简单聊天室(NodeJS + node-websocket-server)
- Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G
- 基于HTML5和Tomcat WebSocketServlet的聊天室简单实现
- 基于Tomcat7、Java、WebSocket的服务器推送聊天室
- 基于Tomcat7、Java、WebSocket的服务器推送聊天室
- 学习WebSocket(二):使用Spring WebSocket做一个简单聊天室
- 基于Netty的IM简单实现原理
- HTML5基于Tomcat 7.0实现WebSocket连接并实现简单的实时聊天
- 基于AJAX的长轮询(long-polling)方式实现简单的聊天室程序
- 基于html5 websocket API简单实现断点上传文件
- Linux软件包安装2——基于red hat系列的rpm命令安装及apache简单搭建httpserver
- 基于Netty的RPC简单框架实现(四):Netty实现网络传输