远程智力英雄

远程智力英雄 查看完整档案

天津编辑上海交通大学  |  计算机 编辑天津智汇互联  |  node全栈 编辑 coding.net/u/YupegLV 编辑
编辑

等我以后写不了程序了就去做木匠

个人动态

远程智力英雄 提出了问题 · 2020-03-05

解决如何在大量文章中根据关键字搜索出相关文章?

比如mysql中存储的大量的文章,除了 like 匹配搜索以外。还有没有其他高效的方法搜索包含某一词的文章?
如果文章是以文件的方法存储的,如何高效的查找出包含某一词的文章呢?

关注 5 回答 5

远程智力英雄 提出了问题 · 2020-03-03

解决VScode 有没有可以直接打开 word,excel 的插件?

RT
VScode 有没有可以直接打开 word,excel 的插件?
不能在文件树处直接打开很烦躁啊。

关注 3 回答 2

远程智力英雄 提出了问题 · 2020-01-03

解决请问java中 判断 a>3 和 a>=2 在底层运算有什么区别?

请问在java中 int a > 3 和 a >= 2在底层的运算有什么区别?
是不是 a > 3的算法要比 a >= 2快一点?

关注 3 回答 2

远程智力英雄 提出了问题 · 2018-09-30

解决jquery(或原生)如何监听 input range 被动修改的事件?

有个需求,是当input range的值发生改变时捕捉事件,
主动改变input range的事件可以通过jq的oninputonpropertychange捕获。
但是通过jq直接设置值的事件捕获不到
$('#input').val(111);
有什么办法可以捕获这个事件么?

关注 1 回答 1

远程智力英雄 发布了文章 · 2018-09-08

netty 搭建 ssl websocket 服务器,使用 protobuf 通信

被 Apple_Sa 的栗子坑的不行,决定自己写个教程以供未来的自己参考

证书

从阿里云申请证书得到如下几个文件

clipboard.png

需要先用 openssl.pfx 转成 .key

openssl pkcs12 -in server.pfx -nocerts -nodes -out server.key

提示需要输入密码,密码在 pfx-password.txt 文件里。
最终需要 2149826361xxxx.pem 文件和 server.key 文件

netty服务器

Server.java

File file = new File("2149826361xxxx.pem");
File key = new File("server.key");
try {
    SslContext sslCtx = SslContextBuilder.forServer(file, key).build();
    open(sslCtx);
} catch (SSLException e) {
    e.printStackTrace();
}
private void open(SslContext sslCtx) {
    EventLoopGroup bossGroup = new NioEventLoopGroup();
    EventLoopGroup workerGroup = new NioEventLoopGroup();
    try {
        ServerBootstrap b = new ServerBootstrap();
        b.group(bossGroup, workerGroup)
                .channel(NioServerSocketChannel.class)
                .childHandler(new Initializer(sslCtx))
                .option(ChannelOption.SO_BACKLOG, 1024)
                .childOption(ChannelOption.SO_KEEPALIVE, true);

        ChannelFuture ch = b.bind(port).sync();
        ch.channel().closeFuture().sync();
    } catch (InterruptedException e) {
        e.printStackTrace();
    } finally {
        bossGroup.shutdownGracefully();
        workerGroup.shutdownGracefully();
    }
}

Initializer.java


public class Initializer extends ChannelInitializer<NioSocketChannel> {
    private final SslContext sslCtx;
    public Initializer (SslContext sslCtx) {
        this.sslCtx = sslCtx;
    }
    protected void initChannel(NioSocketChannel ch) throws Exception {
        ChannelPipeline pipeline = ch.pipeline();
        pipeline.addLast(sslCtx.newHandler(ch.alloc()));
        pipeline.addLast(new HttpServerCodec());
        pipeline.addLast(new HttpObjectAggregator(65536));
        pipeline.addLast(new ChunkedWriteHandler());
        pipeline.addLast(new WebSocketServerCompressionHandler());
        pipeline.addLast(new WebSocketServerProtocolHandler("/chat", null, true, 1024 * 10));
        pipeline.addLast(new MessageToMessageDecoder<WebSocketFrame>() {
            @Override
            protected void decode(ChannelHandlerContext ctx, WebSocketFrame frame, List<Object> objs) throws Exception {
                ByteBuf buf = frame.content();
                objs.add(buf);
                buf.retain();
            }
        });
        pipeline.addLast(new MessageToMessageEncoder<MessageLiteOrBuilder>() {
            @Override
            protected void encode(ChannelHandlerContext ctx, MessageLiteOrBuilder msg, List<Object> out) throws Exception {
                ByteBuf result = null;
                if (msg instanceof MessageLite) {
                    result = wrappedBuffer(((MessageLite) msg).toByteArray());
                }
                if (msg instanceof MessageLite.Builder) {
                    result = wrappedBuffer(((MessageLite.Builder) msg).build().toByteArray());
                }
                WebSocketFrame frame = new BinaryWebSocketFrame(result);
                out.add(frame);
            }
        });
        pipeline.addLast(new ProtobufDecoder(ReqPB.PBdata.getDefaultInstance()));
        pipeline.addLast(new ProtoHandler());
    }
}

ProtoHandler.java


public class ProtoHandler extends SimpleChannelInboundHandler<ReqPB.PBdata> {
    private static Logger log = Logger.getLogger(ProtoHandler.class);

    @Override
    public void channelActive(ChannelHandlerContext ctx) throws Exception {
        super.channelActive(ctx);
    }

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, ReqPB.PBdata msg) {
        log.info("收到消息:" + msg);
    }
    
    @Override
    public void channelInactive(ChannelHandlerContext ctx) throws Exception {
        log.info("断开链接");
        super.channelInactive(ctx);
    }

    @Override
    public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
       log.info("链接异常");
    }
}
查看原文

赞 1 收藏 1 评论 0

远程智力英雄 关注了专栏 · 2018-08-31

前端精读专栏

精读前端业界好文,每周更新

关注 6512

远程智力英雄 关注了专栏 · 2018-08-31

全沾开发(huā)

各种前端相关&Node.js

关注 1999

远程智力英雄 关注了用户 · 2018-08-31

Java中文社群 @vipstone

公众号「Java中文社群」编程•读书

关注 2763

远程智力英雄 关注了专栏 · 2018-08-31

日新亭

苟日新,日日新,又日新。

关注 3023

远程智力英雄 关注了专栏 · 2018-08-31

凯威的讲堂

分享系统架构设计实现,机器学习,也讲讲best practice

关注 550

认证与成就

  • 获得 20 次点赞
  • 获得 18 枚徽章 获得 1 枚金徽章, 获得 3 枚银徽章, 获得 14 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

注册于 2016-03-31
个人主页被 1.6k 人浏览