ListenSocket ClientSocket的围棋
在this article约Go Web Server
,那里是Listen Socket
和Client Socket
在Go
,ListenSocket ClientSocket的围棋
我不明白为什么GoLang需要两个插槽Listen Socket, Client Socket
但不只是一个插座,任何人都可以解释其概念或放弃一个隐喻?
编辑:更新我的答案。
也许我误解的图形或图形是不是画得非常好,可能Listen Socket
,Client Socket
是同一个插座,如果插座没有接受来自客户端,它被称为Listen Socket
连接,并在其后接受连接,它改名为Client Socket
,只有一个插座有不同的舞台和名称。
更新1:
我找到插座工作Here更好的文章和图表。
在文章的grpah中,很明显,当有新的连接时,TCP服务器将 创建一个新的套接字来处理连接,并且Listen Socket
继续监听其他连接。
以下是文章中的一段:
由TCP服务器创建的第一个插座,通过
NetSock_Open()
,通常被指定为listen socket
,并调用NetSock_Listen()
后,仍然开放无止境,允许服务器响应各种连接请求。而不是使用此套接字与请求客户端交换数据,服务器将为每个请求创建一个新的套接字。
更新2
由于第一次更新正在Micrium公司,我找到另一个似乎更通用的TCP工作instuction Here:
TCP连接流程下面的序列显示了TCP
连接的流量:
服务器创建一个等待远程客户端连接的监听套接字。
客户端发出connect()套接字函数来启动TCP握手(SYN,SYN/ACK,ACK)。服务器发出accept()套接字 函数来接受连接请求。
客户端和服务器发出read()和write()套接字函数以通过套接字交换数据。
注意:除read()和write()套接字函数以外,还有几种可用于发送和接收数据的SSL API。
服务器或客户端决定关闭套接字。这导致TCP关闭序列(FIN和ACK)发生。
服务器或者关闭侦听套接字,或者重复从第2步开始接受来自远程客户端的另一个连接。
注:接受()套接字函数结束后通常情况下,服务器将 成两个进程(或线程)。第一个进程处理与客户端的连接 ,第二个进程发出下一个 accept()套接字函数。图1显示了TCP 连接的例子:
注:
我找到另一个Socker Programming Tutorial提关于TCP的工作细节。
并在.NET Framework MSDN,约
Socket.Accept Method()
解释说:Accept synchronously extracts the first pending connection request from the connection request queue of the listening socket, and then creates and returns a new Socket.
我已经脱脂RFC about TCP更新1之前,但我没有看到它提到,听使用一个插座上的细节,而当接受它会创建另一个新的套接字。
也许彻底的方法是研究关于在
Go
中创建套接字和连接的源代码,但我现在不想做。
这只是试图说明如何处理TCP连接,它根本就不是特定的。服务器必须接受客户端连接,否则它不会执行任何操作。 – JimB