我想知道同时处理多个连接的最佳稳定方法是什么?
我正在使用 vb6,目前使用的是 winsock api 的 no Winsock 控件。我之前尝试过,它也不是多线程的。
目前,当线程忙于发送数据时,只有一个线程效率不高,另一个连接器被延迟。直到线程空闲。
我正在使用 WSAAsyncSelect 非阻塞套接字。
因此,由于 VB6 在多线程方面不稳定。我正在考虑使用 ASM DLL,然后从处理连接的 vb6 调用它。但是最好的方法是什么?为每个连接创建一个线程,然后在recv 之后终止线程?或者保持连接一直打开,直到另一部分关闭它?
因为运行客户端的服务器没有那么好的规范。所以更多的线程会消耗更多的资源。
我对性能更好的了解不多,所以请分享您的意见。
另外如何确保所有数据都已从非阻塞套接字上的发送函数发送?
应该循环发送并计算每次发送多少字节?还是只调用一次?我注意到如果我发送的大数据无法在 1 次处理,我在调用 WSAAsyncSelect 时指定的处理网络事件的窗口会再次被调用,因此有更多数据要发送,但如何确保这是属于到这个部分发送?还是recv?
注意:最大可同时连接的连接数约为 100。
这是我在通过网络大小 (5 kb) 发送图片时遇到的问题示例
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 If
recv 的返回值始终是 WSAEWOULDBLOCK,所以我进入了一个无限循环。有什么建议么?