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

ops/2025/1/23 12:54:23/

简介: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/ops/152470.html

相关文章

MySQL——主从同步

提醒&#xff1a;进行配置时&#xff0c;需要确保一主两从的操作系统、MySQL版本一致&#xff0c;否则将出现问题 环境介绍 服务器IP主服务器172.25.254.10从服务器-1172.25.254.11从服务器-2172.25.254.12 配置 # 快速配置&#xff0c;选择多重执行&#xff0c;确保版本一…

docker load报错(unexpected EOF)

今天解决了一个困扰我2天的问题&#xff0c;那就是docker load 失败&#xff0c;背景是这样的&#xff0c;同事离职交接给我一个基础docker镜像文件&#xff0c;大约600M&#xff0c;然后我把这个文件拖到Centos7虚拟机中&#xff0c;然而docker load的时候报错了&#xff0c;错…

java开发之文件上传

前端&#xff1a;必须设置表单的内容格式为multipart/form-data&#xff0c;必须有file表单项&#xff0c;method必须为POST 服务器端&#xff1a;用MultipartFile格式接受文件 文件存储 本地存储&#xff1a;存储到服务器本地磁盘目录。调用MultipartFile的transferTo()方…

于灵动的变量变幻间:函数与计算逻辑的浪漫交织(下)

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 这一节我们主要来学习单个函数的声明与定义&#xff0c;static和extern… 这里写目录标题 一、单个函数…

python实现答题游戏

有这样一个需求&#xff1a;使用python实现一个游戏&#xff0c;一共有10个问题&#xff0c;依次回答每个问题&#xff0c;每个用户可以输入问题的答案&#xff0c;但是互相不能看到&#xff0c;有一个管理员可以看到所有人的答案&#xff0c;并且当所有人都填写完成后可以公布…

论文速读| A Survey on Data Synthesis and Augmentation for Large Language Models

论文地址&#xff1a;https://arxiv.org/abs/2410.12896v1 bib引用&#xff1a; misc{wang2024surveydatasynthesisaugmentation,title{A Survey on Data Synthesis and Augmentation for Large Language Models}, author{Ke Wang and Jiahui Zhu and Minjie Ren and Zeming L…

【Ubuntu】安装SSH启用远程连接

【Ubuntu】安装OpenSSH启用远程连接 零、安装软件 使用如下代码安装OpenSSH服务端&#xff1a; sudo apt install openssh-server壹、启动服务 使用如下代码启动OpenSSH服务端&#xff1a; sudo systemctl start ssh贰、配置SSH&#xff08;可跳过&#xff09; 配置文件 …

Tmux新手使用教程

1. 概述tmux 想象一下&#xff0c;你需要在终端中同时做很多事情&#xff1a;编辑代码、运行程序、查看日志等等。如果每个任务都开一个终端窗口&#xff0c;会很乱而且切换麻烦。 tmux 就相当于一个终端的“管理器”&#xff0c;它可以&#xff1a; 让你在一个终端窗口里打…