草庐IT

非阻塞

全部标签

sockets - ConnectAsync 阻塞 UI 线程

我有一个简单的WinRT应用程序,它将通过TCP与远程服务器通信。为了做到这一点,我正在创建新的StreamSocket对象,并在单击适当的按钮后连接到远程服务器,如下所示:privateasyncvoidConnectButtonClick(objectsender,RoutedEventArgse){StreamSocketsocket=newStreamSocket();HostNamehost=newHostName("192.168.1.15");awaitsocket.ConnectAsync(host,"12121");}问题是这段代码阻塞了UI线程。我创建了简单的动画,

c# - Thrift 非阻塞服务器 c#

最近我们用ApacheThrift替换了我们的内部消息传递库。在我们的设置中,我们有几个c#服务和几个连接到它们的c++“客户端”。一开始我们使用TThreadPoolServer作为服务器实现。_server=newTThreadPoolServer(processor,serverTransport);因为它运行良好,我们还更换了最后一台服务器。此服务器需要与400多个客户端通信。我们看到的问题是,一旦客户端编号100连接,我们的服务器就停止接受新连接,甚至不调用c#计时器。在第一批客户断开连接之前,它似乎有点窒息。通过阅读此SOLargenumberofsimulteneousc

tcp - 如何检查非阻塞 luasocket 客户端是否丢失了连接?

我正在为OBS编写一个Lua脚本,它通过TCP连接不断地从ProPresenter(另一个程序)接收数据。我使用LuaSocket库建立连接,并按预期获得数据。问题是,当我关闭ProPresenter时,我无法让我的脚本注册连接已关闭,同时我将luasocket超时设置为0(因为它是非阻塞连接)。我需要脚本始终处于非阻塞状态,否则它会导致所有OBS停滞并且帧率降至1以下...但是,如果我将超时设置为例如。1秒,luasocket注册连接关闭没有问题,并根据this例如,当超时为0时它也应该工作。但显然它没有,我怀疑这是因为该示例使用了旧版本的Luasocket,而最新版本可能已经更改。

tcp - 给定 TCP,当 IO 是非阻塞时,State Design Pattern 是否用处不大?

在我的TCP应用程序中,只要IO处于阻塞状态,状态设计模式似乎就很有用。我的SwingWorker的doInBackground()可以通过引用一个对象循环访问TCP连接中的读取、写入和接受状态。请参阅维基百科讨论页上的示例:http://en.wikipedia.org/wiki/Talk%3AState_pattern.然而,当我将服务器重构为非阻塞IO时,它似乎不再有用了。Select()返回一组准备好进行IO的channel,这些channel通过引用一系列if语句中的SelectionKey状态来处理。任何人都可以根据经验或理解来确认当IO是非阻塞时状态设计模式是否仍然有用?

networking - 为什么 UDP 广播以比 TCP 低得多的速度阻塞路由器?

想法:我们有一个生成大约200-300Mb/s数据的成像系统,这些数据目前通过以太网电缆传输到计算机,计算机解压缩它们并显示实时图像。我们正试图通过让系统通过以太网电缆将数据包传递到路由器,然后路由器将udp数据包广播到计算机(或最终-多台计算机),从而使系统在LAN上无线化。在最高层看起来有点像这样:之前:成像设备->cat-5->计算机(在达到所需的300Mb/s时工作正常)之后:成像设备->cat-5->路由器->802.11ac无线->电脑(超过5Mb/s的巨大(50%+)数据丢失)-电脑:surfacepro3-路由器:BuffaloAirStationAC1750DD‑WR

c++ - 如何使用 streamsocket 作为 poco 库中的非阻塞 tcp 客户端?

poco库为tcp服务器提供了一个reactor框架。并且有一些示例演示了如何使用它。但我找不到任何streamsocket的例子。我只想在非阻塞模式的tcp客户端使用,请问如何使用?谢谢。 最佳答案 对于C++中的网络I/O,建议使用ASIO因为它正在准备包含在C++语言标准中。 关于c++-如何使用streamsocket作为poco库中的非阻塞tcp客户端?,我们在StackOverflow上找到一个类似的问题: https://stackoverflo

java - Java InputStream 到 OutputStream 的非阻塞回显

它已经建立了以下代码,看起来运行良好:voidpipe(InputStream,OutputStreamos){try{try{byte[]buf=newbyte[1024*16];intlen,available=is.available();while((len=is.read(buf,0,available>0?available:1))!=-1){os.write(buf,0,len);available=is.available();if(available以前,我发现如果我调用is.read(buf),那么,即使数据可用,它也会阻塞等待更多数据,直到缓冲区已满。这是一个用于

c - 非阻塞 tcp 套接字如何在发送失败的数据包上通知应用程序。

我正在为linux系统开发一个非阻塞的Ctcp套接字。我读过在非阻塞模式下,如果没有错误,“发送”命令将立即返回“发送的字节数”。我猜这个返回值实际上并不意味着这些数据已经传送到目的地,而是数据已经传递到内核内存以供其进一步处理和发送。如果是这样的话,我的应用程序如何知道内核真正向另一端发送了哪个数据包,假设网络连接有一些问题并且内核决定在一段时间内重试几次后放弃几分钟后?我问是因为我希望我的应用程序稍后再次重新发送那些失败的数据包。 最佳答案 Ifthatisthecase,howwouldmyapplicationknowwhi

c++ - 套接字发送调用被阻塞了这么久

我每10秒在套接字上发送2个字节的应用程序数据(阻塞),但发送调用在下面的最后一个实例中被阻塞了超过40秒。2012-06-1312:02:46.653417|信息|发送前2012-06-1312:02:46.653457|INFO|发送后(2)2012-06-1312:02:57.566898|信息|发送前2012-06-1312:02:57.566962|INFO|发送后(2)2012-06-1312:03:08.234060|INFO|发送前2012-06-1312:03:08.234101|INFO|发送后(2)**2012-06-1312:03:19.010743|INFO|

c - 从非阻塞 c 套接字读取大数据

如何在C中读取非阻塞TCP套接字,但读取大块数据?在我的实现中,结果总是负数并且errno等同于“资源暂时不可用”,除非我们的数据大于“大小”。result=read(fd,buffer,size);当我们在C中读取非阻塞TCP套接字时,它不会返回>=0,除非它已经收到我们请求的完整数据,这是真的吗? 最佳答案 不是真的,它会返回当没有数据时,它会设置errno至EAGAIN“资源暂时不可用”或类似的错误值。read()函数将读取尽可能多的数据并返回,该值可能是负值表示错误(*或EAGAINResourceTemporarilyUn