
在 go 中同时监听客户端连接和用户命令输入
在编写终端聊天程序时,服务端需要同时监听客户端连接和用户在终端输入的命令。这是因为服务端既需要处理客户端的请求,又需要及时响应用户的输入。
为了实现这一功能,可以利用 go 的并发机制。具体的做法是,为客户端连接和用户命令输入分别创建两个 goroutine。
这两个 goroutine 可以通过信道进行通信,这样可以确保消息在两个 goroutine 之间同步。
优化代码:
优化后的代码如下:
package main
import (
"fmt"
"os"
)
var recvFromTerminalChan = make(chan string)
var recvFromNetChan = make(chan string)
func main() {
go readFromTerminal()
for {
select {
case str := <-recvFromTerminalChan:
go sendCommandToNet(str)
case str := <-recvFromNetChan:
go doContentFromNet(str)
}
}
}
func readFromTerminal() {
var input string
for {
fmt.Scan(&input)
fmt.Println("input content : ", input)
recvFromTerminalChan <- input
}
}
func sendCommandToNet(command string) {
fmt.Println("command : ", command)
if command == "quit" {
close(recvFromTerminalChan)
close(recvFromNetChan)
os.Exit(0)
}
content := command
recvFromNetChan <- content
}
func doContentFromNet(content string) {
fmt.Println("content from net : ", content)
}以上就是如何在 Go 中同时处理客户端连接和用户命令输入?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号