You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Golang连接php-fpm.service时Accept后代码无响应问题排查

问题分析与解决:Go代码无法接收php-fpm连接

你的代码核心错误在于使用了错误的网络类型:

php-fpm监听的是TCP端口9000(你确认服务运行正常且监听该端口),但你调用net.Listen时传入的第一个参数是"unix"——这是用于Unix域套接字的类型,和TCP协议完全不兼容。

这导致你的listener实际上并没有绑定到9000 TCP端口,而是在等待Unix套接字的连接,自然永远无法接收到php-fpm的请求,Accept()会一直阻塞,后续的log.Print("a")也就永远不会执行。

修正后的代码

package main

import (
    "log"
    "net"
)

func main() {
    // 将网络类型从"unix"改为"tcp",匹配php-fpm的监听协议
    listener, err := net.Listen("tcp", "127.0.0.1:9000")

    if err != nil {
        log.Fatal("Connection error: ", err)
    }
    defer listener.Close() // 确保程序退出时关闭监听资源

    for {
        fd, err := listener.Accept()
        if err != nil {
            log.Printf("Accept error: %v", err)
            continue // 用continue替代Fatal,避免单个错误导致程序退出
        }
        log.Print("a")
        // 启动goroutine处理连接,避免阻塞主循环
        go func(conn net.Conn) {
            defer conn.Close()
            // 此处可添加处理php-fpm请求的逻辑
        }(fd)
    }
}

额外注意事项

  • 先确认php-fpm的监听类型:用ss -tulpn | grep 9000命令检查,确保它确实在监听TCP端口而非Unix套接字(部分默认配置会用/run/php-fpm.sock这类Unix套接字)。
  • 处理连接时建议用goroutine,否则主循环会被单个连接阻塞,无法接收后续请求。

内容的提问来源于stack exchange,提问作者DFG

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 11:01:01