我最初在发送数据时遇到了竞争条件,问题是我允许使用多个 SocketAsyncEventArgs 来发送数据,但是第一个数据包在第二个数据包之前没有完全发送,这是因为我有它所以如果数据缓冲区不适合它循环,直到所有数据都发送完毕,并且第一个数据包比第二个数据包大,第二个数据包很小,所以第二个数据包在第一个数据包之前被发送并到达客户端。
我通过将 1 个 SocketAyncEventArgs 分配给一个用于发送数据的打开连接并使用信号量来限制对它的访问来解决这个问题,并在完成后使 SocketAsyncEventArgs 回调。
现在这工作正常,因为所有数据都已发送,当它完成下一次发送准备好时回调。问题是,当我想将数据随机发送到打开的连接时,它会导致阻塞,而当有大量数据发送时,它会阻塞我的线程。
我正在寻找解决此问题的方法,我想有一个队列,当请求发送数据时,它只是将数据包添加到队列中,然后 1 SocketAsyncEventArgs 只是循环以发送该数据。
但是我怎样才能在保持可扩展性的同时有效地做到这一点呢?在按照请求发送的顺序发送数据包时,我想尽可能避免阻塞。
感谢任何帮助!