【发布时间】:2015-03-05 20:31:13
【问题描述】:
全新的 Go.. 显然仍在学习语法和基础知识.. 但我确实有一个特定的目标..
我正在尝试在 :8080 上建立一个简单的服务器,它可以响应 HTTP 和 socket.io(通过 /socket.io/ url),特别是使用 CORS。
我的代码:
package main
import (
"log"
"net/http"
"github.com/rs/cors"
"github.com/googollee/go-socket.io"
)
func SayHelloWorld(w http.ResponseWriter, r *http.Request) {
w.Write([]byte("Hello, World!"))
}
func main() {
c := cors.New(cors.Options{
AllowedOrigins: []string{"*"},
AllowCredentials: true,
})
server, err := socketio.NewServer(nil)
if err != nil {
log.Fatal(err)
}
server.On("connection", func(so socketio.Socket) {
log.Println("on connection")
so.Join("chat")
so.On("chat message", func(msg string) {
log.Println("emit:", so.Emit("chat message", msg))
so.BroadcastTo("chat", "chat message", msg)
})
so.On("disconnection", func() {
log.Println("on disconnect")
})
})
server.On("error", func(so socketio.Socket, err error) {
log.Println("error:", err)
})
http.Handle("/socket.io/", c.Handler(server))
http.HandleFunc("/", SayHelloWorld)
log.Println("Serving at localhost:8080...")
log.Fatal(http.ListenAndServe(":8080", nil))
}
在客户端我仍然看到:
到 'wss://api.domain.com/socket.io/?EIO=3&transport=websocket&sid=xNWd9aZvwDnZOrXkOBaC' 的 WebSocket 连接失败:在建立连接之前 WebSocket 已关闭。
(index):1 XMLHttpRequest 无法加载 https://api.domain.com/socket.io/?EIO=3&transport=polling&t=1420662449235-3932&sid=xNWd9aZvwDnZOrXkOBaC。请求的资源上不存在“Access-Control-Allow-Origin”标头。 Origin 'http://fiddle.jshell.net' 因此不允许访问。
编辑 #1:
所以我一直在拼命试图理解为什么我无法连接.. 遇到了一个更令人困惑的难题?
https://gist.github.com/acoyfellow/167b055da85248c94fc4
上面的要点是我的golang服务器的代码+用于连接的浏览器代码..这段代码将每秒向后端发送30个HTTP GET请求,无需连接、升级或给予任何错误(客户端或服务器端).. 它本质上 DDOS 是我自己的后端?
有人,请有人告诉我我在做一些愚蠢的事情。这真是个泡菜:P
编辑 #2:
我可以通过简单地调整 Go 中 socket.io 端点 URL 上的尾随 / 来停止“DDOS”。所以:mux.Handle("/socket.io", server) 到 mux.Handle("/socket.io/", server) 现在将产生错误消息和连接尝试错误回应:
到“wss://api.domain.com/socket.io/?EIO=3&transport=websocket&sid=0TzmTM_QtF1TaS4exiwF”的 WebSocket 连接失败:WebSocket 握手期间出错:意外响应代码:400 socket.io-1.2.1。 js:2
GET https://api.domain.com/socket.io/?EIO=3&transport=polling&t=1420743204485-62&sid=0TzmTM_QtF1TaS4exiwF 400(错误请求)
【问题讨论】:
标签: go websocket socket.io cors