有一个echo服务器和一个echo客户端。当我使用kill-9
杀死客户端进程时,将调用服务器上的channelinactive
。
EchoServer类
public class EchoServer {
private final int port;
public EchoServer(int port) {
this.port = port;
}
public static void main(String[] args) throws InterruptedException {
int port = 9001;
new EchoServer(port).start();
}
public void start() throws InterruptedException {
EventLoopGroup group = new NioEventLoopGroup();
try {
ServerBootstrap bootstrap = new ServerBootstrap();
bootstrap
.group(group)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline()
.addLast(new ChannelInboundHandlerAdapter() {
@Override
public void channelInactive(ChannelHandlerContext ctx) throws Exception {
System.out.println("channelInactive()");
}
});
}
});
ChannelFuture future = bootstrap.bind(new InetSocketAddress(port)).sync();
future.channel().closeFuture().sync();
} finally {
group.shutdownGracefully().sync();
}
}
}
EchoClient类
public class EchoClient {
private final String host;
private final int port;
public EchoClient(String host, int port) {
this.host = host;
this.port = port;
}
public void start() throws InterruptedException {
EventLoopGroup group = new NioEventLoopGroup();
try {
Bootstrap bootstrap = new Bootstrap();
bootstrap
.group(group)
.channel(NioSocketChannel.class)
.handler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
}
});
ChannelFuture future = bootstrap.connect(new InetSocketAddress(host, port)).sync();
future.channel().closeFuture().sync();
} finally {
group.shutdownGracefully().sync();
}
}
public static void main(String[] args) throws InterruptedException {
new EchoClient("localhost", 9001).start();
}
}
客户端被SIGKILL杀死,因此它应该没有时间主动关闭这个套接字。
客户端应用程序不会主动关闭套接字。如果本地应用程序不再打开套接字,客户端OS内核将隐式关闭该套接字。
问题内容: 不管我做什么,如果没有立即使用其他PID弹出另一个实例,我似乎都无法杀死Redis -我检查以确保自己正在杀死父进程,并且确实如此。有什么建议么??我已经尝试过重启机器。 问题答案: 弄清楚了!原来当我尝试了这样的SO帖子提供的第二个答案的时候,我做了然后跑了,当我实际上应该跑的时候。我不知道为什么这很重要。
有没有办法使用超时来标记进程?如果进程在30分钟内没有优雅地终止,则该进程应该被标记。理想情况下,这种优雅的关闭应该在后台执行。
我在写一个玩家轮流参加的游戏。在一个回合结束时,我将我的数据发送到服务器,并更新我的数据库,让我知道现在轮到另一个玩家了。问题是,如果有人在中途扼杀了应用程序怎么办?我是说去找任务经理然后杀了它。 编辑:我还应该提到这是在一个片段中,我正在检查这个,但不要认为这会有什么不同。
问题内容: 我试图围绕电子(以前称为Atom Shell)的工作原理进行研究。 我来自一个传统的MVC风格的Web应用程序,在该应用程序中,浏览器通过 路由系统 调用 Controller动作 ,然后Controller从商店(文件系统,数据库等)获取数据并呈现 View ,它被发送回浏览器。某些操作可能会发回JSON,因为它们是通过JavaScript / AJAX调用的,而不是通过浏览器实际导
在我的应用程序中,我有一个在后台(和前台)运行。 在这个中,有一个,当它完成时,我想在某个中启动应用程序并在中自动执行一些操作,即使我的应用程序被杀死或关闭,我也希望它能正常工作。 我看到了一些答案,这是其中之一,但它对我不起作用。我找到了一个更好的解决方案,并将其作为答案发布在下面,但仍然只有在应用程序关闭但未完全关闭时才有效。 如何从后台启动,即使应用程序已关闭或关闭?
我试图将Node.js Socket.io客户机连接到Python/Flask Socket.io服务器。 在服务器(Raspberry Pi)上运行这个项目:pi-gpio-server。这个项目已经有了一个内置的网站,这是一个socket.io客户机来访问Raspberry PI的引脚。整个项目运作良好。 有什么想法吗,为什么我找不到联系?在Flask服务器中有客户机的限制吗?有什么特别的命令