【问题标题】:Cannot connect to socket.io with Golang无法使用 Golang 连接到 socket.io
【发布时间】:2022-12-03 23:02:25
【问题描述】:

所以,基本上这是我的 socketio 服务器的代码:

package main

import (
    "log"
    "net/http"

    socketio "github.com/googollee/go-socket.io"
)

func main() {
    server := socketio.NewServer(nil)

    server.OnConnect("/socket.io/", func(s socketio.Conn) error {
        s.SetContext("c")
        log.Println("connected:", s.ID())
        s.Emit("connection", "connected")
        return nil
    })
    server.OnDisconnect("/", func(s socketio.Conn, reason string) {
        log.Println("closed", reason, s.Context())
    })
    go server.Serve()
    defer server.Close()

    http.Handle("/socket.io/", server)
    http.Handle("/", http.FileServer(http.Dir("./")))

    log.Println("Serving at localhost:4000...")
    log.Fatal(http.ListenAndServe(":4000", nil))
}

这是我尝试在客户端(网页)中访问它的方式:

const socket = io('ws://localhost:4000/socket.io/')
console.log(socket);

我的问题是客户端控制台和服务器控制台上没有任何记录。

更多信息 :

  • 我在 http://localhost:4000 访问我的网页客户端
  • 网页加载正确

【问题讨论】:

    标签: go websocket socket.io


    【解决方案1】:

    您提供的代码存在一些潜在问题,可能会阻止客户端和服务器进行通信。

    首先,在您的客户端代码中,您尝试使用 ws:// 协议连接到套接字服务器,但套接字服务器实际上使用的是 http:// 协议。这意味着客户端正在尝试连接到错误的协议,并且将无法与服务器建立连接。要解决此问题,您可以将客户端代码中的 ws:// 协议更改为 http://:

    const socket = io('http://localhost:4000/socket.io/')
    console.log(socket);
    

    另一个潜在问题是您的服务器代码正在为 OnConnect 和 OnDisconnect 事件使用 /socket.io/ 命名空间,但您的客户端代码在连接到服务器时未指定此命名空间。这意味着客户端和服务器没有使用相同的命名空间,因此无法通信。要解决此问题,您可以在连接到服务器时在客户端代码中指定 /socket.io/ 命名空间:

    const socket = io('http://localhost:4000/socket.io/', {
      path: '/socket.io/'
    })
    console.log(socket);
    

    最后,您的服务器代码没有监听来自客户端的任何事件,因此即使客户端能够连接到服务器,它也无法向服务器发送任何事件或消息。要解决此问题,您可以将事件处理程序添加到服务器代码中,以侦听来自客户端的事件并对其做出响应。例如,您可以添加一个 OnEvent 处理程序来侦听来自客户端的消息事件并将消息记录到服务器控制台:

    server.OnEvent("/socket.io/", "message", func(s socketio.Conn, msg string) string {
      log.Println("received message:", msg)
      return ""
    })
    

    通过这些更改,您的客户端和服务器代码应该能够通信,并且您应该看到记录到客户端和服务器控制台的消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-23
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 2019-08-10
      • 2019-02-15
      • 1970-01-01
      • 2013-08-15
      相关资源
      最近更新 更多