2010-12-10 26 views
7

即时通讯使用Tclientsocket构件实现或Indy的TIdTCPClient(取决于项目)线程是否可以共享相同的客户端套接字?

我有几个线程处理每一个项目,有时需要在连接的客户端套接字发送数据。 (数据读取形成承插口是不是在处理线程使用)

基本上我的问题是...

  • 是可能的?
  • 它是“安全”吗?

或者我应该

  • 具有每个线程的客户机套接字或
  • 一些有点儿的编组/关键部分

的Delphi -7-印-9

+1

顺便说一句,Indy 9.x已经过时 – 2010-12-10 10:42:39

+0

你好,我知道,(有点德尔菲7我猜)它的事情的“名单”) – 2010-12-10 12:45:19

回答

4

多个线程可以读写同一个套接字。因为每次你在accept时,它都会提取挂起连接队列上的第一个连接,创建一个具有相同套接字属性的新套接字,并为该套接字分配一个新的文件描述符。

因此,每个接受的连接只有一个线程。

如果您问是否可以在接受的连接上进行多次写入/读取,您将需要锁定功能,因此会损失并行性优势。如果您想要对一个较长的进程进行线程处理,然后将结果写入套接字,请使用同步按正确的顺序进行写入。

相关问题