草庐IT

Java Serializable、ObjectInputstream、非阻塞 I/O

我刚刚开始使用Java序列化,我不清楚在非阻塞I/O的情况下您应该如何从源获取对象。我能找到的所有文档都建议使用ObjectInputStream是读取序列化对象的正确方法。但是,正如我提到的,我正在使用java.nio并执行非阻塞操作。如果readObject()将阻塞直到有新对象可用,这对我没有帮助总结..使用JavaNIO时如何进行序列化? 最佳答案 将序列化实例包装在一个报告有效负载长度的协议(protocol)中,有效负载就是所讨论的实例。然后,一旦您知道您有一个表示完整实例的段,您就可以安全地使用ObjectInputS

java - 如何从 HttpsURLConnection 创建 Java 非阻塞 InputStream?

基本上,我有一个URL,可以在发布新消息时从聊天室流式传输xml更新。我想将该URL转换为InputStream并继续从中读取,只要保持连接并且只要我没有发送Thread.interrupt()。我遇到的问题是,当有内容要从流中读取时,BufferedReader.ready()似乎没有变为真。我正在使用以下代码:BufferedReaderbuf=newBufferedReader(newInputStreamReader(ins));Stringstr="";while(Thread.interrupted()!=true){connected=true;debug("Listen

java - 从 Flux 消费时按顺序调用非阻塞操作,包括重试

所以我的用例是在SpringWebflux应用程序中使用来自Kafka的消息,同时使用ProjectReactor以响应式(Reactive)风格进行编程,并按照从中接收消息的顺序对每条消息执行非阻塞操作卡夫卡。系统还应该能够自行恢复。这是设置为使用的代码片段:Flux>messages=Flux.defer(()->{KafkaReceiverreceiver=KafkaReceiver.create(options);returnreceiver.receive();});messages.map(this::transformToOutputFormat).map(this::p

logging - Java 中的异步非阻塞远程日志记录?

是否有轻量级日志框架/服务器可用于在Java中设置远程日志记录?我知道log4j有SocketAppenders但a)我想要一个更开箱即用的库,我可以在其中简单地运行一个日志服务器,b)我希望日志记录调用是完全异步的非阻塞代码和c)日志服务器上基于Web的仪表板/查看器也不错 最佳答案 您可以将log4j与SyslogAppender一起使用,并使用一些tool用于查看系统日志(-ng)。使用log4j附带的异步附加器包装器,可以找到一篇关于它的不错的文章here. 关于logging-

java - 使用 Thrift 的非阻塞 SSL 服务器

Thrift提供了几种不同的非阻塞服务器模型,如TNonblockingServer、THsHaServer和TThreadedSelectorServer。但是,我想在服务器上启用SSL。似乎SSL仅适用于Thrift中的阻塞服务器。有人知道Thrift中非阻塞SSL服务器的线索吗?Java示例将不胜感激。 最佳答案 在您的Java应用程序中担心SSL的另一种方法是将nginx(http://wiki.nginx.org/SSL-Offloader)之类的东西作为反向代理。这样做的好处是您的应用程序不需要关心SSL,但确实需要在您

java - 泽西客户端非阻塞

产生大量线程从来都不是一个好主意(当你创建太多线程时,你可能会耗尽内存)。通常,Jersey需要为每个请求创建一个线程。情况似乎是这样,无论我是否使用async()(Jersey在其中为我创建线程-我已经在调试器中对此进行了调查),或者(显然我必须自己创建线程)。所以这是一个不够好的具体情况:我正在以高达500个请求/秒的速度向远程服务器发送HTTP消息。但是由于响应可能需要一些时间才能到达(我计算最多30秒),线程总数很容易达到数千个(此时,JVM进程通常会崩溃)。而且,创建这么多线程简直是疯了。处理该负载的可用处理器/网络/操作系统资源实际上应该是小菜一碟。所以我想做的是只触发请求

java - 是否有类似于 ExecutorService invokeAll 的非阻塞方法?

Java的ExecutorService接口(interface)定义了一个名为invokeAll的方法,该方法接收要并发处理的Callable对象集合。但是,invokeAll方法本身会等待所有任务完成运行后再返回,这使其成为一种阻塞方法。在我的测试环境中,我不关心这些任务的返回值,我只需要它们并发运行。现在,我知道我可以手动创建新的Thread或Runnable对象并自己启动它们,但是如果我可以简单地创建一个Runnable或Callable对象并将它们传递给开始为我执行它们并立即返回的方法。有人知道现有的库类具有我所描述的方法吗?我在做一些研究时找不到。

用于高并发情况的Java有界非阻塞缓冲区

基本上我需要一个数据结构来存储服务器端的临时聊天消息。应该是:有界:因为我不需要存储太多消息,客户端会每秒发送一次获取新消息的请求。我认为绑定(bind)大小应该是最大值。一秒钟内并发请求的数量。当缓冲区已满时,旧消息将被删除。适合高并发访问:我不想使用Collections.synchronizedXXXX这样的数据结构,因为在迭代过程中,如果其他线程改变了数据结构,例如添加一条消息,它会抛出一个异常,所以我必须锁定整个数据结构,实际上我并不关心客户端请求是否可以获得最后插入的消息,因为他们会在一秒钟后发送一个新请求,另一方面,写操作应该永远不会延迟。包java.util.concu

java - 运行外部进程的非阻塞线程

我创建了一个JavaGUI应用程序,它作为许多低级外部进程的包装器。该实用程序按原样运行,但迫切需要一项重大改进。我希望我的外部进程以非阻塞方式运行,这将允许我并行处理其他请求。简而言之,我希望能够在生成数据时处理来自外部进程的数据。但看起来我检查外部进程是否仍在运行的基本尝试正在阻塞。下面是我的ExternalProcess类的摘录。有关线程和阻塞的特定Java功能问题,请参阅内联评论。publicvoidExecute(){System.out.println("Startingthread...\n");Runner=newThread(this,"ExternalProcess

java - 每个请求模型的线程能否比非阻塞 I/O 更快?

我记得2或3年前读过几篇文章,其中人们声称现代线程库变得如此出色以至于每个请求线程服务器不仅比非阻塞服务器更容易编写,而且它们会也更快。我相信这甚至在Java中通过将Java线程映射到pthread的JVM进行了演示(即Javanio开销超过了上下文切换开销)。但现在我看到所有“尖端”服务器都使用异步库(Javanio、epoll,甚至node.js)。这是否意味着异步赢了? 最佳答案 我认为不是。如果两种模型都得到很好的实现(这是一个很大的要求),我认为NIO的概念应该占上风。计算机的核心是内核。无论您做什么,您都无法将应用程序并