Netty搭建websocket服务器,postman可以连接,浏览器无法连接

devtools/2025/1/22 18:38:51/

简介:Netty搭建websocket服务器postman可以连接,浏览器无法连接,很奇怪,不知道为什么。最后更换端口解决问题,原来端口时6666,把6666改成其他端口就可以了。

过程:
前端代码
在这里插入图片描述
后端netty代码相关配置

//socket端口int port = 4848;//websocket端口int wsPort=6666;EventLoopGroup bossGroup = new NioEventLoopGroup();EventLoopGroup workerGroup = new NioEventLoopGroup();try{//socket通信ServerBootstrap bootstrap = new ServerBootstrap();//websocket通信ServerBootstrap wbsBootstrap=new ServerBootstrap();//处理socket信息bootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler(new ChannelInitializer<SocketChannel>(){@Overrideprotected void initChannel(SocketChannel ch) throws Exception {System.out.println("连接ip"+ch.remoteAddress());clientContext.put(ch.remoteAddress().getHostString(),ch);
//									ch.writeAndFlush(Unpooled.copiedBuffer(Bytes.HexString2Bytes("a55a000a820000880d0a")));System.out.println(ch.remoteAddress()+"xxxxx!");//添加一个粘包分包处理器ch.pipeline().addLast(new DelimiterBasedFrameDecoder(29, false, Unpooled.wrappedBuffer(new byte[] {(byte)0x0D,(byte)0x0A})));//注册handelerch.pipeline().addLast(new MyNettyServerHandler(systemService));}							}).option(ChannelOption.SO_BACKLOG, 1024).childOption(ChannelOption.SO_KEEPALIVE, true);wbsBootstrap.group(bossGroup, workerGroup).channel(NioServerSocketChannel.class).childHandler(new WebSocketChannelInitializer());ChannelFuture f = bootstrap.bind(port).sync();ChannelFuture wsf = wbsBootstrap.bind(wsPort).sync();wsf.channel().closeFuture().sync();f.channel().closeFuture().sync();

后端webSocketchannelInitializer()的代码:

public class WebSocketChannelInitializer extends ChannelInitializer<SocketChannel>{@Overrideprotected void initChannel(SocketChannel ch) throws Exception {System.out.println("连接ws-ip"+ch.remoteAddress());
//        ChannelPipeline pipeline = ch.pipeline();
//        pipeline.addLast(new HttpServerCodec());
//        pipeline.addLast(new ChunkedWriteHandler());
//        //用于将http数据聚合到一起发送一个请求 fullHttpRequest
//        pipeline.addLast(new HttpObjectAggregator(8192));
//        pipeline.addLast(new WebSocketServerProtocolHandler("/"));//传入websocket path
//        pipeline.addLast(new TextWebSocketHandler());//传入websocket path// 获取职责链ChannelPipeline pipeline = ch.pipeline();// pipeline.addLast(new HttpServerCodec());pipeline.addLast(new HttpObjectAggregator(65535));//解决跨域问题CorsConfig corsConfig = CorsConfigBuilder.forAnyOrigin().allowNullOrigin().allowCredentials().build();pipeline.addLast(new CorsHandler(corsConfig));pipeline.addLast(new ChunkedWriteHandler());pipeline.addLast(new WebSocketServerProtocolHandler("/"));pipeline.addLast(new TextWebSocketHandler());}
}

后端TextWebSocketHandler()的代码:

public class TextWebSocketHandler extends SimpleChannelInboundHandler<TextWebSocketFrame> {@Overrideprotected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception {int size = GlobalChannelGroup.channelGroup.size();System.out.println("当前微信墙连接数:" + (size == 0 ? 0 : size - 1));System.out.println("收到消息:" + msg.text());Channel channel = ctx.channel();
//		ctx.writeAndFlush(msg.text());
//		ctx.writeAndFlush(msg);ctx.writeAndFlush(new TextWebSocketFrame("nihaohao"));
//		GlobalChannelGroup.channelGroup.forEach(o -> {
//			if (o.localAddress().toString().endsWith("6666")) {
//				o.writeAndFlush(msg.text());
//			} else {
//				TextWebSocketFrame text = new TextWebSocketFrame(o.remoteAddress() + "发送消息:" + msg.text() + "\n");
//				o.writeAndFlush(text);
//			}
//		});}@Overridepublic void handlerAdded(ChannelHandlerContext ctx) throws Exception {Channel ch = ctx.channel();GlobalChannelGroup.channelGroup.add(ch);
//		GlobalChannelGroup.channels.add(ctx);}@Overridepublic void channelInactive(ChannelHandlerContext ctx) throws Exception {System.out.println(ctx.channel().remoteAddress() + ":离开聊天室");}@Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception {Channel ch = ctx.channel();GlobalChannelGroup.channels.add(ctx);System.out.println(ch.remoteAddress() + ":连接到聊天室");}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {System.out.println("异常");GlobalChannelGroup.channels.remove(ctx);ctx.close();}
}

最终连接效果就是postman可以正常连接,但是浏览器连接不上。结果如下
在这里插入图片描述
浏览器显示如下
在这里插入图片描述
在这里插入图片描述
如果把端口改成8989,浏览器显示正常。

在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/devtools/152662.html

相关文章

Python----Python高级(模块与包,Python基本库)

一、模块 1.1、概念 就是一个包含了Python代码的以.py为后缀的Python文件&#xff0c;可以被其他 Python程序导入和使用&#xff0c;也可以自己独立执行&#xff0c;里面存放着的是一组相关的函 数或者类&#xff0c;比如查看关键字列表时导入的keyword模块。 1.2、作用 令Py…

嵌入式硬件篇---基本组合逻辑电路

文章目录 前言基本逻辑门电路1.与门&#xff08;AND Gate&#xff09;2.或门&#xff08;OR Gate&#xff09;3.非门&#xff08;NOT Gate&#xff09;4.与非门&#xff08;NAND Gate&#xff09;5.或非门&#xff08;NOR Gate&#xff09;6.异或门&#xff08;XOR Gate&#x…

前端包管理工具npm、pnpm 和 Yarn 的总结对比

1. npm npm 是 Node.js 的官方包管理工具&#xff0c;长期以来是 JavaScript 生态系统的标准工具。它提供了丰富的功能&#xff0c;并且与所有 Node.js 项目兼容。 优点&#xff1a; 广泛的兼容性&#xff1a;npm 是默认的包管理工具&#xff0c;与 Node.js 的所有版本兼容&…

Text2SQL 智能报表方案介绍

0 背景 Text2SQL智能报表方案旨在通过自然语言处理&#xff08;NLP&#xff09;技术&#xff0c;使用户能够以自然语言的形式提出问题&#xff0c;并自动生成相应的SQL查询&#xff0c;从而获取所需的数据报表&#xff0c;用户可根据得到结果展示分析从而为结论提供支撑&#…

小程序获取微信运动步数

1、用户点击按钮&#xff0c;在小程序中触发getuserinfo方法&#xff0c;获取用户信息 <scroll-view class"scrollarea" scroll-y type"list"><view class"container"><button bind:tap"getLogin">获取</button&…

ZOXM的魔法篇

本篇解决的问题 docker镜像无法拉取&#xff0c;github网站无法访问 第一步&#xff1a;先解决可以上网github 方案一&#xff1a;dev-sidecar工具 https://gitee.com/timfengzi/dev-sidecar 缺点&#xff1a;有时候不稳定&#xff0c;但是这个已经比修改hosts文件好用多了&am…

我的创作纪念日,纪念我的第512天

目录 年末 年初 入围 博客 变动 生活 期待 年末 很快&#xff0c;2024年已经过去了&#xff0c;本想在跨年夜的时候营造一点小小的仪式感&#xff0c;结果也因为身体的原因放弃了&#xff0c;浑身感觉疼痛&#xff0c;躺在床上&#xff0c;闭上眼睛&#xff0c;什么也不…

AI与SEO关键词优化的结合:提升排名的新路径与思考

内容概要 在数字化浪潮席卷全球的背景下&#xff0c;人工智能&#xff08;AI&#xff09;技术日益成为提升搜索引擎优化&#xff08;SEO&#xff09;效果的重要工具。随着技术的不断演进&#xff0c;传统的关键词研究方法也在发生变化。AI的引入&#xff0c;不仅提高了关键词选…