Я новичок в Golang, Angular (7.1.4) и веб-розетках. Я строго следую этому уроку , чтобы выучить их, и все идет как положено. Однако я не понимаю, как Angular обслуживает страницу чата на localhost: 4200 / *, где * может быть что угодно, что я наберу.
Редактировать: мой основной вопрос: как это происходит, учитывая, что единственное место, где я вообще затронул URL, похоже, находится в этой строке this.socket = new WebSocket("ws://localhost:12345/ws")
в socket.service.ts в проекте Angular. Я думаю, это означает, что страница должна загружать только на локальный хост: 4200, если угодно.
Я прочитал некоторую документацию Angular, и ближе всего я пришел к ответу на его странице по маршрутизации , где написано: «** путь в последнем маршруте является подстановочным знаком. Маршрутизатор выберет этот маршрут, если запрошенный URL не совпадает ни с одним путем для маршрутов, определенных ранее в конфигурации. " Но я нигде не использовал **
. На самом деле, я не использовал маршрутизацию вообще после учебника.
Вот полный файл socket.service.ts:
import { Injectable } from "@angular/core";
import { EventEmitter } from "@angular/core";
@Injectable({
providedIn: "root"
})
export class SocketService {
private socket: WebSocket;
private listener: EventEmitter<any> = new EventEmitter();
public constructor() {
# I think only this line is used to manage the URL.
this.socket = new WebSocket("ws://localhost:12345/ws");
this.socket.onopen = event => {
this.listener.emit({ type: "open", data: event });
};
this.socket.onclose = event => {
this.listener.emit({ type: "close", data: event });
};
this.socket.onmessage = event => {
this.listener.emit({ type: "message", data: JSON.parse(event.data) });
};
}
public send(data: string) {
this.socket.send(data);
}
public close() {
this.socket.close();
}
public getEventListener() {
return this.listener;
}
}
В main.go на Голанге только две строки, и в первую очередь http.HandleFunc("/ws", wsPage)
, относятся к URL-адресу чата. Исходя из этого, я предположил, что страница также может загружаться на локальный хост: 12345 / ws. Но переход туда выдает "Bad Request 404 page not found" Вот код, который я считаю актуальным для main.go:
func wsPage(res http.ResponseWriter, req *http.Request) {
conn, error := (&websocket.Upgrader{CheckOrigin: func(r *http.Request) bool { return true }}).Upgrade(res, req, nil)
if error != nil {
http.NotFound(res, req)
return
}
client := &Client{id: uuid.NewV4().String(), socket: conn, send: make(chan []byte)}
manager.register <- client
go client.read()
go client.write()
}
func main() {
go manager.start()
# Only these two lines relate to the URL.
http.HandleFunc("/ws", wsPage)
http.ListenAndServe(":12345", nil)
}
Может ли кто-нибудь объяснить, как Angular управляет URL-адресами в этом случае и как его URL имеет приоритет над Golang? Или укажите мне правильную документацию / материалы для чтения? Спасибо.