使用net.Listen可快速创建TCP或Unix域套接字服务器,通过listener.Accept()接收连接并用goroutine并发处理,实现如回显服务。

在Go语言中,使用net.Listen启动一个服务器非常直接。它属于标准库net包,可用于监听TCP、Unix域套接字等网络连接。最常见的是通过TCP协议创建一个基础的网络服务。
net.Listen函数用于在指定的网络类型和地址上创建监听器。对于TCP服务,通常使用"tcp"作为网络类型,并绑定到某个IP和端口(如":8080"表示本机所有IP的8080端口)。
listener, err := net.Listen("tcp", ":8080")
如果监听成功,会返回一个net.Listener接口,之后可以通过它接受客户端连接。
立即学习“go语言免费学习笔记(深入)”;
示例代码:
package main
import (
"io"
"log"
"net"
)
func main() {
// 监听本地8080端口
listener, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatal("监听失败:", err)
}
defer listener.Close()
log.Println("服务器已启动,监听 :8080...")
for {
// 等待客户端连接
conn, err := listener.Accept()
if err != nil {
log.Println("接受连接出错:", err)
continue
}
// 处理每个连接(这里简单回显数据)
go handleConnection(conn)
}
}
// 处理客户端连接
func handleConnection(conn net.Conn) {
defer conn.Close()
io.Copy(conn, conn) // 回显客户端发送的内容
}
这个例子实现了一个简单的“回显服务器”,客户端发送什么,服务器就原样返回。
net.Listen支持多种网络类型:
地址格式依类型而定:
本书全面介绍PHP脚本语言和MySOL数据库这两种目前最流行的开源软件,主要包括PHP和MySQL基本概念、PHP扩展与应用库、日期和时间功能、PHP数据对象扩展、PHP的mysqli扩展、MySQL 5的存储例程、解发器和视图等。本书帮助读者学习PHP编程语言和MySQL数据库服务器的最佳实践,了解如何创建数据库驱动的动态Web应用程序。
385
":8080"、"127.0.0.1:8080"、"[::1]:8080"(IPv6)"/tmp/mysocket.sock"
例如使用Unix域套接字:
listener, err := net.Listen("unix", "/tmp/goserver.sock")
if err != nil {
log.Fatal(err)
}
defer listener.Close()
// 后续 Accept 用法相同
listener.Accept()是阻塞调用,每次返回一个net.Conn连接对象。为了同时处理多个客户端,通常使用goroutine。
上面例子中:
go handleConnection(conn)
为每个连接启动一个独立协程,实现并发处理。
注意:
defer conn.Close())实际项目中应更细致地处理错误,比如端口被占用、权限不足等。
可以结合context实现服务器优雅关闭:
ctx, cancel := context.WithCancel(context.Background())
// 在另一个goroutine中监听关闭信号
go func() {
sigCh := make(chan os.Signal, 1)
signal.Notify(sigCh, os.Interrupt)
<-sigCh
log.Println("正在关闭服务器...")
cancel()
listener.Close() // 触发 Accept 返回错误
}()
基本上就这些。net.Listen 提供了底层网络能力,适合构建自定义协议服务或学习网络编程。对于HTTP服务,建议使用net/http包,但其底层也是基于net.Listen实现的。
以上就是Golang如何使用net.Listen启动服务器的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号