Answers
应该是两个程序监听一个端口会报错。
websocket, http 都是基于tcp实现的。websocket 的连接请求都是用的http。websocket和http是在一个层面上的东西。比如在Go中处理websocket请求:
路由:
http.HandleFunc("/ws", serveWs)
处理action:
func serveWs(w http.ResponseWriter, r *http.Request) {
if r.Method != "GET" {
http.Error(w, "Method not allowed", 405)
return
}
if r.Header.Get("Origin") != "http://"+r.Host {
http.Error(w, "Origin not allowed", 403)
return
}
ws, err := websocket.Upgrade(w, r, nil, 1024, 1024)
if _, ok := err.(websocket.HandshakeError); ok {
http.Error(w, "Not a websocket handshake", 400)
return
} else if err != nil {
log.Println(err)
return
}
c := &connection{send: make(chan []byte, 256), ws: ws}
h.register <- c
c.writePump()
h.unregister <- c
}
和普通的http请求处理很类似,也是使用GET方法,Node的原理也是一样的。
另外一个端口可以接受多个tcp请求。