小编Asp*_*lis的帖子

Netty channel.write不写消息

我正在尝试使用Netty的第一步,为此我在Net上编写了简单的服务器,在oio plain TCP上编写了简单的客户端.

客户端发送随机文本包,并且必须接收"ack"消息.请参阅处理程序方法:

  @Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {

    ctx.write("Ack"); 
    ctx.flush();

    ByteBuf in = (ByteBuf) msg;
    StringBuilder sb = new StringBuilder();
    try {
        while (in.isReadable()) {
            sb.append((char) in.readByte());

        }
    } finally {
        ReferenceCountUtil.release(msg);
    }
    LOG.debug("Incoming message. ACK was send");

    String myaddr = ctx.channel().remoteAddress().toString();
    String message = "Message from " + myaddr + " :" + sb.toString();
    LOG.debug(message);
    sendToOther(myaddr, message);

}
Run Code Online (Sandbox Code Playgroud)

问题是 - 当我尝试发回"Ack"字符串时 - 客户端什么也得不到.但是当我尝试发回传入消息时 - 它工作正常,我在客户端看到回声.

 @Override
public void channelRead(ChannelHandlerContext ctx, Object msg) throws …
Run Code Online (Sandbox Code Playgroud)

java sockets jboss network-programming netty

5
推荐指数
1
解决办法
8881
查看次数

在代理上启用ssl后,服务器发送的事件已停止工作

我制作了一个基于Tomcat和Nginx的web项目.
不得不努力工作,没有错误.
但是,当我将ssl添加到nginx时.停止工作服务器发送事件.
如果我直接使用后端服务器 - 它可以正常工作,所以问题就在于nginx.
有人有这样的问题吗?
这是配置的相关部分

我的nginx.conf(我还没有使用网站启用,也把我的应用配置在这里.在conf结束时的基本设置)./ SecurConfig/api/tutorial/listen - 是事件的来源

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
worker_connections 768;
# multi_accept on;
}

http {

root /data/;

server{
listen 80;
#   server_name ajaxdemo.in.ua;
#   proxy_set_header Host ajaxdemo.in.ua;
location / {
rewrite ^(.*)$ https://ajaxdemo.in.ua$1 permanent;
}
}

server {
#listen 80;
listen 443 default ssl;

#ssl on;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key; 



  proxy_set_header  Host               $host;
  proxy_set_header  X-Real-IP          $remote_addr;
  proxy_set_header  X-Forwarded-For    $proxy_add_x_forwarded_for;
  proxy_set_header            X-Forwarded-Proto $scheme;

location / {
    root /data/www; …
Run Code Online (Sandbox Code Playgroud)

ssl nginx server-sent-events

4
推荐指数
1
解决办法
4747
查看次数

ByteBuf初始容量大小

请给我建议如何增加ByteBuf的初始容量。
在这样的情况下:

 @Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws  Exception {

    byte[] byteinput = new byte[in.readableBytes()]; 
    in.readBytes(byteinput);  

//further handling...
}
Run Code Online (Sandbox Code Playgroud)

如果收入消息超过ByteBuf的最大容量-我将得到削减的数据。对于整个项目而言,获得完整的,非分块的消息至关重要。

我想我需要在引导子选项OptionOptions或在ChannelInitializer内部的cannel.config()中设置ByteBuf的初始容量。
我尝试了不同的方法,例如设定

ch.config().setReceiveBufferSize(1024)
Run Code Online (Sandbox Code Playgroud)

但我仍然具有相同的ByteBuf容量值(例如496)。

UPD

我发现了使用Wireshk进行的协议通信,以及从测试用户客户端传入和传出的1,4k数据包都未损坏。此问题仅与净值设置有关。操作系统套接字缓冲区不会剪切消息。

java netty

3
推荐指数
1
解决办法
2123
查看次数

在不同的上下文处理程序中使用通道属性

我正在开发的应用程序服务器部分将基于Netty 4.0。但是,我遇到了通道共享变量的问题。
我已经读过要在其他需要使用的上下文处理程序中使用此类变量

  • context.channel()。attr(key).set()

而不只是

  • context.attr(key).set()

将我的变量附加到当前频道
像这儿:

 public class HadlePackets extends ChannelInboundHandlerAdapter {

private static final Logger LOG = LoggerFactory.getLogger(HadlePackets.class);
public AttributeKey<Integer> clientIDattrKey = new AttributeKey<Integer>  ("ClientID");

@Override
public void channelRead(ChannelHandlerContext ctx, Object message) throws Exception {
 ...
ctx.channel().attr(clientIDattrKey).set(IDnum); //bind ID to channel

...
}
}
Run Code Online (Sandbox Code Playgroud)

但是,如何在处理程序的另一个上下文中检索变量的值?属性键仍然是必需的,我无法从附加变量的处理程序中获取它。

public class StorageHandler extends ChannelInboundHandlerAdapter{
private static final Logger LOG = LoggerFactory.getLogger(StorageSaveHandler.class);

@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
    Integer clientID = (Integer)ctx.channel().attr(null).get(); //How can i get proper key for this …
Run Code Online (Sandbox Code Playgroud)

java netty

2
推荐指数
1
解决办法
6821
查看次数