netty做服务端,netty websocket wss做作客户端,怎么使用使用wss协议

没有更多推荐了,
不良信息举报
举报内容:
WebSocket 与 netty服务器 实战
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!Netty 当作websocket 怎么接入wss呢?
[问题点数:40分]
Netty 当作websocket 怎么接入wss呢?
[问题点数:40分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
匿名用户不能发表回复!|netty同时做HTTP和websocket服务器并且实现HTTP路由的思路 - 简书
netty同时做HTTP和websocket服务器并且实现HTTP路由的思路
近期需要给别人做一个HTTP加Websocket的处理后端,果断选了spring+netty的组合,spring提供IOC容器+AOP+事务,netty处理IO,但是netty提供的HTTP比较底层,还需要自己处理路由,,,还是比Servlet麻烦不少,于是陆续将自己学习和编码过程中一些东西写出来,希望能帮的到别人。用的是netty5
学习netty用到的资源
《netty权威指南》,给很多步骤做出了解释,没解释的看API
官方的demo,下载netty-example-5.0.0.Alpha2-sources.jar源码包解压,给出了很多Demo
Github,netty项目很多,分析下源码
server端编码,主要讲一下channel中的handler
HttpServerCodec:ByteBuf-&HttpRequest或HttpContent和HttpResponse或者HttpContent-&ByteBuf,即HTTP请求的解码和编码
HttpObjectAggregator:把多个消息转换为一个单一的FullHttpRequest或是FullHttpResponse,原因是HTTP解码器会在每个HTTP消息中生成多个消息对象HttpRequest/HttpResponse,HttpContent,LastHttpContent
WebSocketServerCompressionHandler:WebSocket数据压缩(可选)
ChunkedWriteHandler:大文件支持(没有写在代码中,可选)
HttpHandler:自定义的HTTP和Websocket处理类,二者处理也可以分开在多个ChannelHandler中,在这里写在一个Handler中
handler方法和childHandler方法区别
handler存在于AbstractBootstrap,目的是添加一个handler,监听Bootstrap动作,它在初始化时就会执行
childHandler存在于ServerBootstrap,目的是添加一个handler,监听已经连接的客户端的Channel的动作和状态,在客户端连接成功后才执行。
option方法和childOption方法区别
option存在于AbstractBootstrap,提供给NioServerSocketChannel用来接收进入的连接。
childOption存在于ServerBootstrap ,提供给ServerChannel接收已经建立的连接。
public void run(final int port) throws InterruptedException {
EventLoopGroup bossGroup = new NioEventLoopGroup();
EventLoopGroup workerGroup = new NioEventLoopGroup();
ServerBootstrap b = new ServerBootstrap();
b.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer&SocketChannel&() {
protected void initChannel(SocketChannel ch)
throws Exception {
ch.pipeline().addLast("respDecoder-reqEncoder",
new HttpServerCodec())
.addLast("http-aggregator",
new HttpObjectAggregator(65536))
.addLast(new WebSocketServerCompressionHandler())
.addLast("action-handler", new HttpHandler());
ChannelFuture future = b.bind(new InetSocketAddress(port)).sync();
logger.info("The http server powered by netty is listening on " + port);
future.channel().closeFuture().sync();//阻塞处理,等待服务端链路关闭之后main函数才退出
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
自定义的ChannelHandler,用于处理HTTP和Websocket
区别HTTP和Websocket请求
public void messageReceived(ChannelHandlerContext ctx, Object msg) {
if (msg instanceof FullHttpRequest) {//如果是HTTP请求,进行HTTP操作
handleHttpRequest(ctx, (FullHttpRequest) msg);
} else if (msg instanceof WebSocketFrame) {//如果是Websocket请求,则进行websocket操作
handleWebSocketFrame(ctx, (WebSocketFrame) msg);
上面的Object类型的msg就是extends SimpleChannelInboundHandler&Object&中的Object,我们可以定义ChannelHandler时将Object换成FullHttpRequest,这样就只处理HTTP请求,换成WebSocketFrame只处理websocket
HTTP请求的分发
//处理HTTP的代码
private void handleHttpRequest(ChannelHandlerContext ctx, FullHttpRequest req) {
HttpMethod method=req.method();
String uri=req.uri();
diapathcer(method,uri);
private void diapathcer(HttpMethod method,String uri){
if(method==HttpMethod.GET&&"/login".equals(uri)){
//....处理
}else if(method==HttpMethod.POST&&"/register".equals(uri)){
3. 实际中路由不会这样写,我们可以自定义路由的实现,写在一个类中专门实现路由,或者自定义一个配置文件,像properties一样,每一行格式形如:(GET
\login LoginAction),我们知道properties是继承HashTable(String,String),我们可以自定义配置文件的对应类继承HashMap(String,HashMap(String,String)),我自己已经将路由和路由配置文件的实现完成,以后会陆续公开
4. 自定义ChannelHandler代码
public class HttpHandler extends SimpleChannelInboundHandler&Object& {
public void messageReceived(ChannelHandlerContext ctx, Object msg) {
if (msg instanceof FullHttpRequest) {//如果是HTTP请求,进行HTTP操作
handleHttpRequest(ctx, (FullHttpRequest) msg);
} else if (msg instanceof WebSocketFrame) {//如果是Websocket请求,则进行websocket操作
handleWebSocketFrame(ctx, (WebSocketFrame) msg);
public void channelReadComplete(ChannelHandlerContext ctx) {
ctx.flush();
//处理HTTP的代码
private void handleHttpRequest(ChannelHandlerContext ctx, FullHttpRequest req) {
HttpMethod method=req.method();
String uri=req.uri();
diapathcer(method,uri);
private void diapathcer(HttpMethod method,String uri){
if(method==HttpMethod.GET&&"/login".equals(uri)){
//....处理
}else if(method==HttpMethod.POST&&"/register".equals(uri)){
//处理Websocket的代码
private void handleWebSocketFrame(ChannelHandlerContext ctx, WebSocketFrame frame) {
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
ctx.close();
java,go,vue
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
netty常用API学习 netty简介 Netty是基于Java NIO的网络应用框架. Netty是一个NIO client-server(客户端服务器)框架,使用Netty可以快速开发网络应用,例如服务器和客户端协议。Netty提供了一种新的方式来使开发网络应用程序,...
本文依照 知识共享许可协议(署名-非商业性使用-禁止演绎) 发布。 编写HTTP 服务器与客户端 Vert.x让编写非阻塞的HTTP 服务器与客户端变得非常轻松。 创建HTTP 服务器 缺省状况:HttpServer server = vertx.createHttpSer...
X399平台点睛之笔ZENITHEXTREME引爆性能狂潮 近期,X399平台的顶级性能浮出水面,各家媒体的全方位测试犹如一支强心剂,让PC玩家大呼过瘾。我们惊喜地发现,国内外各大科技媒体一致选用了ROGZENITH EXTREME这款主板。它是华硕目前最顶级的X399芯片...
Nginx API for Lua Introduction ngx.arg ngx.var.VARIABLE Core constants HTTP method constants HTTP status constants Nginx log level consta...
每个女人的际遇,都是特定的人生剧本。皆无须重复谁的来路,也不必参照谁的去程。成熟从不以年龄为界线;真正成熟的人、看的清自己、做得出选择,付得起成本,担得起责任。与自己和平共处,与生活两情相悦。能一个人精彩,才能与全世界相爱。 看看身边哪些过的幸福的人儿,哪一个不是自己一路走...
女儿5岁多了,特别喜欢买公主玩具。有时问她长大想做什么?她也总是回答:“当公主。”每每听到这儿,我就喜忧参半。
喜的是爱美之心人皆有之,孩子爱美是天性。忧的是怕孩子只懂外表,不懂充实内在。不知应不应该干预……
这两天回乡下过春节,孩子多玩得开心,...
对于时间都吝啬的人是看不到凌晨的月亮,晒不到半落的夕阳的。我是个自由主义者,只要我高兴,随着性子就做自己喜欢的事,不在乎时间的早、晚,不在乎时间的长、短,生命就这一次,我得取悦自己,偶尔也取悦一下别人,有很多像我这样的人,也有很多不像我这样的人。人是建立规则,然后又打破规...
小黄豆20个月零19天,她能说一些话了,但相较而言,她的语言敏感期比其他同龄的宝宝要来得晚一些,但已经比我和她爸爸早很多了,据说我是两岁多才会说话,她爸爸跟我半斤八两。 小黄豆现在能说的名词,除了各种叠音的称呼外,“阿姨”是她目前会的唯一一个复词,并且她轻易不叫出口,一旦叫...&>&Netty整合Spring实现websocket服务器demo
Netty整合Spring实现websocket服务器demo
上传大小:7.26MB
Netty整合Spring实现websocket服务器并实现收发消息。
综合评分:0
下载个数:
{%username%}回复{%com_username%}{%time%}\
/*点击出现回复框*/
$(".respond_btn").on("click", function (e) {
$(this).parents(".rightLi").children(".respond_box").show();
e.stopPropagation();
$(".cancel_res").on("click", function (e) {
$(this).parents(".res_b").siblings(".res_area").val("");
$(this).parents(".respond_box").hide();
e.stopPropagation();
/*删除评论*/
$(".del_comment_c").on("click", function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_invalid/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parents(".conLi").remove();
alert(data.msg);
$(".res_btn").click(function (e) {
var parentWrap = $(this).parents(".respond_box"),
q = parentWrap.find(".form1").serializeArray(),
resStr = $.trim(parentWrap.find(".res_area_r").val());
console.log(q);
//var res_area_r = $.trim($(".res_area_r").val());
if (resStr == '') {
$(".res_text").css({color: "red"});
$.post("/index.php/comment/do_comment_reply/", q,
function (data) {
if (data.succ == 1) {
var $target,
evt = e || window.
$target = $(evt.target || evt.srcElement);
var $dd = $target.parents('dd');
var $wrapReply = $dd.find('.respond_box');
console.log($wrapReply);
//var mess = $(".res_area_r").val();
var mess = resS
var str = str.replace(/{%header%}/g, data.header)
.replace(/{%href%}/g, 'http://' + window.location.host + '/user/' + data.username)
.replace(/{%username%}/g, data.username)
.replace(/{%com_username%}/g, data.com_username)
.replace(/{%time%}/g, data.time)
.replace(/{%id%}/g, data.id)
.replace(/{%mess%}/g, mess);
$dd.after(str);
$(".respond_box").hide();
$(".res_area_r").val("");
$(".res_area").val("");
$wrapReply.hide();
alert(data.msg);
}, "json");
/*删除回复*/
$(".rightLi").on("click", '.del_comment_r', function (e) {
var id = $(e.target).attr("id");
$.getJSON('/index.php/comment/do_comment_del/' + id,
function (data) {
if (data.succ == 1) {
$(e.target).parent().parent().parent().parent().parent().remove();
$(e.target).parents('.res_list').remove()
alert(data.msg);
//填充回复
function KeyP(v) {
var parentWrap = $(v).parents(".respond_box");
parentWrap.find(".res_area_r").val($.trim(parentWrap.find(".res_area").val()));
评论共有0条
VIP会员动态
CSDN下载频道资源及相关规则调整公告V11.10
下载频道用户反馈专区
下载频道积分规则调整V1710.18
spring mvc+mybatis+mysql+maven+bootstrap 整合实现增删查改简单实例.zip
资源所需积分/C币
当前拥有积分
当前拥有C币
输入下载码
为了良好体验,不建议使用迅雷下载
Netty整合Spring实现websocket服务器demo
会员到期时间:
剩余下载个数:
剩余积分:0
为了良好体验,不建议使用迅雷下载
积分不足!
资源所需积分/C币
当前拥有积分
您可以选择
程序员的必选
绿色安全资源
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
为了良好体验,不建议使用迅雷下载
资源所需积分/C币
当前拥有积分
当前拥有C币
您的积分不足,将扣除 10 C币
为了良好体验,不建议使用迅雷下载
无法举报自己的资源
你当前的下载分为234。
你还不是VIP会员
开通VIP会员权限,免积分下载
你下载资源过于频繁,请输入验证码
您因违反CSDN下载频道规则而被锁定帐户,如有疑问,请联络:!
若举报审核通过,可返还被扣除的积分
被举报人:
举报的资源分:
请选择类型
资源无法下载 ( 404页面、下载失败、资源本身问题)
资源无法使用 (文件损坏、内容缺失、题文不符)
侵犯版权资源 (侵犯公司或个人版权)
虚假资源 (恶意欺诈、刷分资源)
含色情、危害国家安全内容
含广告、木马病毒资源
*详细原因:
Netty整合Spring实现websocket服务器demo没有更多推荐了,
不良信息举报
举报内容:
Netty笔记:使用WebSocket协议开发聊天系统
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!}

我要回帖

更多关于 netty socket服务端 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信