我想知道同时处理多个连接最稳定的方法是什么?
我使用的是vb6,目前使用的是winsock api的no Winsock控件。我以前试过,它也不是多线程的。
目前,它只是一个线程,当线程忙于发送数据时,效率很低,另一个连接器被延迟。直到线程空闲。
我使用的是WSAAsyncSelect非阻塞套接字。
因此,由于VB6在多线程方面并不稳定。我正在考虑使用ASM,然后从vb6调用它来处理连接。但是最好的方法是什么呢?为每个连接创建一个线程,然后在recv之后终止该线程?或者一直保持连接打开,直到另一方关闭它?
因为运行客户端的服务器并没有那么好的规格。所以线程越多,消耗的资源就越多。
我没有太多关于性能更好的知识,所以请分享你的意见。
另外,如何确保所有数据都是从非阻塞套接字上的send函数发送的?
是否应该循环发送并计算每次发送的字节数?还是只打一次电话?我注意到,如果我发送的大数据不能在1次处理,我在call to WSAAsyncSelect指定的处理网络事件的窗口再次被调用,因此有更多的数据需要发送,但是如何确定这属于这个部分发送?还是recv?
注意:最多可以同时连接100个连接。
这是一个我在网络大小(5kb)上发送图片时遇到的问题的例子,有时它是通过一次recv调用接收的,而有时它被分成几个部分
If Bytes = PicSize Then
MsgBox "All data are sent 1 time"
Else
MsgBox "there is more data left"
While Bytes <> PicSize
bytesRecieved = recv(s, Buffer(Bytes), UBound(Buffer), 0)
If bytesRecieved > 0 Then
Bytes = Bytes + bytesRecieved
End If
DoEvents
Wend
End Ifrecv的返回值总是WSAEWOULDBLOCK,所以我进入了一个无限循环。有什么建议吗?
发布于 2013-05-24 20:14:23
你问了不止一个问题,这让你很难回答。无论是直接使用异步winsock还是使用WinSock控件,重要的是要认识到,当您认为“忙于发送数据”时,您所做的只是将数据传递到网络堆栈。这很快就会发生,你的代码就会继续。希望这些数据最终会到达目的地。这一部分不会很快发生,但是您的代码已经转移到处理下一个任务。
https://stackoverflow.com/questions/16699743
复制相似问题