- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
在 this article 关于Go Web Server
, 有 Listen Socket
和 Client Socket
在Go
,
我不明白为什么 GoLang 需要两个套接字 Listen Socket, Client Socket
但不只是一个 socket ,谁能解释一下它的概念或打个比方?
编辑:我更新我的答案。
最佳答案
也许我误解了图表或者图表画得不是很好,可能是Listen Socket
, Client Socket
是相同的套接字,如果套接字没有接受来自客户端的连接,它被称为Listen Socket
, 接受连接后,重命名为 Client Socket
,只有一个套接字具有不同的阶段和名称。
更新 1:
我找到了一篇关于套接字工作的更好的文章和图表 Here .
在文章的grpah中,很明显当有新的连接时,TCP Server会创建一个新套接字来处理连接,Listen Socket
继续监听其他连接。
这是文章中的一段:
The first socket created by a TCP server, via
NetSock_Open()
, is typically designated alisten socket
, and, after the call toNetSock_Listen()
, remains open indefinitely, to allow the server to respond to various connection requests. Rather than using this socket to exchange data with requesting clients, the server will create a new socket for each request.
更新 2
由于第一次更新是在 Micrium 上运行,我发现另一个似乎更通用的 TCP 工作指令 Here :
TCP connection flow The following sequence shows the flow of a TCP
connection:
- The server creates the listener socket that is waiting for remote clients to connect.
- The client issues the connect() socket function to start the TCP handshake (SYN, SYN/ACK, ACK). The server issues the accept() socketfunction to accept the connection request.
- The client and server issue the read() and write() socket functions to exchange data over the socket.
Note: There are several SSL APIs that you can use to send and receive data other than the read() and write() socket functions.
- Either the server or the client decides to close the socket. This causes the TCP closure sequence (FINs and ACKs) to occur.
- The server either closes the listener socket or repeats beginning with step 2 to accept another connection from a remote client.
Note: Normally after the accept() socket function ends, the server dividesinto two processes (or threads). The first process handles theconnection with the client and the second process issues the nextaccept() socket function. Figure 1 shows an example of a TCPconnection:
注意:
我找到另一个 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 在 Update 1 之前,但我没有看到它提到 Listen 使用一个套接字的细节,当 Accept 时它会创建另一个新的套接字。
也许彻底的方法是研究Go
中有关创建套接字和连接的源代码。 ,但我现在不打算这样做。
关于go - ListenSocket ClientSocket Go,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46688738/
我正在使用 go 图表库 https://github.com/wcharczuk/go-chart制作条形图。我面临的问题是标签值很长,我想将文本旋转 45 度以显示完整文本 我喜欢显示的日期格式是
我在构建一个非常简单的通过 cgo 调用 c 代码的 go 程序时遇到了问题。我的设置: $: echo $GOPATH /go $: pwd /go/src/main $: ls ctest.c
没有 C 的背景,只有 Go 的“初学者”经验,我正在尝试弄清楚 main.go 是实际需要的还是只是一个约定。 我想创建一个简单的网络 API,但有人可以为我澄清一下吗? 最佳答案 main.go
我read从 Go 1.4 开始,Go 运行时是用 Go 本身编写的(而不是用 C)。 这怎么可能?如果 Go 程序在运行时之上运行,并且运行时是 Go 程序,那么运行时是否在自身之上运行? 最佳答案
这是“Go 之旅”中的代码示例 Range and Close : package main import ( "fmt" ) func fibonacci(n int, c chan int
给定以下 go.mod 文件: module foo go 1.12 require ( github.com/bar/baz v1.0.0 github.com/rat/cat v1
我有一个 CI/CD 管道,它需要跨平台并与几个不同的管理程序一起工作。为了不必更改 Windows 和 Linux 的构建任务,我认为 Go 将是编写一次代码并在任何地方运行的好方法。然而,考虑到
我有一个 Dockerfile,用于使用 go build 编译 Go 应用程序。我进行了研究,确实建议将 go build 用于生产。 但是我找不到正确的答案来解释为什么。 我了解 go run 创
我尝试在命令提示符#Go lang 中运行该程序-但是当我键入运行“go run hello.go”命令时,我开始了 CreateFile hello.go:The system cannot fin
我正在使用“Go 编程语言”一书学习 Go。第一章介绍os.Open用于读取文件的模块。我尝试打开如下所示的 go 文件。 f, err = os.Open("helloworld.go") 我收
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题?通过 editing this post 添加详细信息并澄清问题. 2年前关闭。 Improve this
为了解决我对 goroutine 的一些误解,我去了 Go 操场跑了 this code : package main import ( "fmt" ) func other(done cha
这个问题在这里已经有了答案: Evaluate/Execute Golang code/expressions like js' eval() (5 个回答) 1年前关闭。 对于任何 go 程序,我想
这是我基本上试图从路径打印基准的代码。 这意味着,如果用户输入“/some/random/path.java”,则输出将为“path”。同样,如果用户arg为“/another/myapp.c”,则输
$ go version 1.13.3 我的文件夹结构如下: GOPATH +---src +--- my-api-server +--- my-auth-server
这个问题在这里已经有了答案: How to embed file for later parsing execution use (4 个答案) What's the best way to bun
我觉得这有点奇怪,为什么这段代码不起作用? package main import "fmt" func main() { var i, j int = 1, 2 k
go编译器执行完如下命令后的可执行文件存放在哪里? $> go run file.go 最佳答案 在 /tmp 文件夹中,如果您使用的是 unix 机器。 如果您使用的是 Windows,则在 \Us
我目前正在开始使用 Go,并且已经深入研究了有关包命名和工作区文件夹结构的注意事项。 不过,我不太确定如何根据 Go 范式正确组织我的代码。 这是我当前的结构示例,它位于 $GOPATH/src 中:
假设我有一个接受用户输入的 Lua 程序,而该输入恰好是有效的 Lua 源代码。这是在程序仍在运行时进行清理、编译和执行的。 Go 是否(或将)实现这样的事情? 最佳答案 我认为以下两个项目之间有足够
我是一名优秀的程序员,十分优秀!