草庐IT

nio-thread

全部标签

java - 是否可以在 CPU 使用率不高的情况下将 NIO 保持在 OP_WRITE 模式

我有一个Android应用程序充当服务器并通过TCP以任意间隔(5-60秒内)从传感器提供一些数据。客户端应用程序偶尔会通过同一连接发送小块数据。必须无延迟地发送和接收数据。所有示例和教程(如这个http://adblogcat.com/asynchronous-java-nio-for-dummies/)都或多或少地显示了相同的场景-阅读完成后,切换到OP_WRITE。写入完成后切换到OP_READ等。显然它不适用于我的情况。我试过像这样同时启用读取和写入serverChannel.register(selector,SelectionKey.OP_READ|SelectionKey

.net - Thread.Sleep 是否会停用 TCPListener?

我有一个线程是这样的:PublicSubStartWork()TrymyTCPListener.Start()WhileStopRequest=FalseDimrequestspendingAsBoolean=m_TCPListener.Pending()IfmyTCPListener.Pending=FalseThenThreading.Thread.Sleep(100)ElseDoSomething()EndIfEndWhileCatchexAsExceptionThrowexEndTryEndSub现在我的问题是:当此处没有任何反应时,我通过Thread.Sleep将线程发送到s

java - NIO 服务器无法收听客户端

您好,我正在尝试实现一个简单的JavaNIO服务器;它向选择器注册了socketChannel。因此,我希望听取客户的意见并发回一些回复。socketChannel注册到selector后,即使client(非NIO)发送了一些数据,Server也无法读取;然而,生成的key仍在迭代中。详细View:服务器端:**Firstthread**:公共(public)无效运行(){同时(真){ServerSocketChannelserverSocketChannel=ServerSocketChannel.open();serverSocketChannel.configureBlocki

c# - 在我的 C# 应用程序中,Thread.Start 在一些稀疏的情况下没有返回

我用C#编写了一个TCP服务器应用程序。应用程序监听入站连接在主监听器线程中使用TcpListener.AcceptTcpClient()方法。收到连接后,TcpListener.AcceptTcpClient()解除阻塞并返回TCPClient对象。收到连接后,将创建一个新线程并开始向新连接读写数据。新线程由以下代码启动。while(true){TcpClientclient=serverListener.AcceptTcpClient();if(client.Connected){Threadt=newThread(delegate(){readWriteData(client);

multithreading - Thread.Sleep() 和 Thread.SpinWait() 有什么区别

我有一个WinForm应用程序,它使用BackGroundWorker创建TCP客户端并将一些数据发送到远程服务器。当套接字完成时关闭连接,BGW从DoWorkSub退出。在RunWorkerCompletedSub中,我必须等待来自远程服务器的数据包,因此我一直在运行一个TCP服务器,该服务器填充FriendString类型变量并使用bool类型变量(标志)指示接收到整个数据包。所以我必须等待那个标志变为True来处理必须在String类型变量中的数据;但我不想挂断GUI,所以我看到存在一个名为SpinWait的方法。那么,这段代码可以工作吗?如果flag在5分钟后没有变为true,

scala - Akka TCP 请求响应需要 Thread.sleep

早上好,我对TCP的基本akkaIO有疑问我有客户端和服务器的基本实现,如akka文档所示:Clientishttps://github.com/akka/akka/blob/v2.5.20/akka-docs/src/test/scala/docs/io/IODocSpec.scala#L67-L103Handler是[SimpleEchoHandler](https://github.com/akka/akka/blob/v2.5.20/akka-docs/src/test/scala/docs/io/EchoServer.scala#L227-L304)但其他的也一样。我有一个在

带有 SSL 和 Postman 的 java.nio.channels.ClosedChannelException

我有一个vertx服务器的完整最小工作示例,如果通过Postman向它发出请求,它将抛出ClosedChannelException。从postman的角度来看,请求似乎没有失败——响应已按预期收到。只有vertx服务器抛出了这个错误。每个新连接只发生一次。通过postman的连续调用不会触发此错误,但完全退出postman并再次调用电话会。它也只有在使用SSL时才会发生。如果删除启用ssl的行,则不会抛出此错误。如果请求是由postman(浏览器/获取)以外的方法发出的,则不会抛出异常。因为我只能使用Postman进行重现,所以我可能不会为此烦恼,但我看到同样的错误在AWS上的非本地

tcp - 客户端 channel 不处于可写状态(NIO)Netty

客户端channel在netty中不处于可写状态。有没有高手指导一下,看看是什么原因为什么channel一直处于不可写状态?因为它不处于可写状态,所以我们的线程处于sleep模式。我们使用Threaddump分析了线程的状态,在下面的循环中添加了一个计数器,它等待一分钟然后退出循环。但我真的很想弄清楚不可写状态的原因。channel关闭后channel是否还留在ctx中(如果EOF不是客户端发送的)?这是否会发生(意味着永远不会处于可写状态)?while(!ctx.getChannel().isWritable()){Thread.sleep(100);}请帮忙。非常感谢

java - 在服务器端或客户端的 Java NIO Socket 期间,什么时候套接字连接准备好发送数据?

我正在使用JavaNIO,这是我第一次建立一个有效的TCP连接(到目前为止我只完成了UDP和很久以前的一个简单的TCP测试程序)。现在,我不确定我可以可靠地开始向客户端发送数据的确切时间,以便他们知道另一端有Activity连接(假设没有出错).假设一切都是非阻塞的。客户:1)打开一个没有绑定(bind)的新套接字channel,因此可以将其设置为异步s=SocketChannel.open()2)设置为非阻塞s.configureBlocking(false)我们需要在这里绑定(bind)吗?或者这只是为了我们想引用本地端口?3)尝试连接到正在监听的服务器s.connect(some

.net - 编码*不是* 'thread per client' 的服务器

使用.NET时,不基于“每个客户端线程”的服务器的基本算法是什么?编辑我正在寻找一个基本的3、4或5行算法/伪代码/模式来描述服务器正在使用的一般过程。与此相反的东西:openaserversocket//thisusestheporttheclientsknowaboutwhile(running)client_socket=server_socket.listenfork(newhandler_object(client_socket)) 最佳答案 事件循环。等待套接字变得可写,写入它们,等待连接,接受它们,等等。在大多数情况下