Chcę utworzyć identyfikator URI protokołu WebSocket względem identyfikatora URI strony po stronie przeglądarki. Powiedzmy, w moim przypadku przekonwertuj identyfikatory URI HTTP, takie jak
http://example.com:8000/path
https://example.com:8000/path
do
ws://example.com:8000/path/to/ws
wss://example.com:8000/path/to/ws
Obecnie zamieniam pierwsze 4 litery „http” na „ws” i dopisuję do niego „/ do / ws”. Czy jest na to lepszy sposób?
websocket
uri
relative-path
neuront
źródło
źródło
path/to/ws
? Dokąd to dokładnie prowadzi? DziękiOdpowiedzi:
Jeśli twój serwer WWW obsługuje WebSockets (lub moduł obsługi WebSocket), możesz użyć tego samego hosta i portu i po prostu zmienić schemat, jak pokazano. Istnieje wiele możliwości jednoczesnego uruchamiania serwera WWW i serwera / modułu Websocket.
Sugerowałbym, abyś spojrzał na poszczególne elementy window.location global i złączył je z powrotem, zamiast wykonywać zastępowanie ślepych łańcuchów.
Zauważ, że niektóre serwery WWW (np. Te oparte na Jetty) używają obecnie ścieżki (zamiast nagłówka aktualizacji) do określenia, czy określone żądanie powinno zostać przekazane do programu obsługi WebSocket. Więc możesz być ograniczony w tym, czy możesz zmienić ścieżkę w sposób, w jaki chcesz.
źródło
"/to/ws"
? Jeśli nie, jaka powinna być wartość tej części?Oto moja wersja, która dodaje port TCP na wypadek, gdyby nie był to 80 lub 443:
Edycja 1: ulepszona wersja zgodnie z sugestią @kanaka:
Edycja 2: Obecnie tworzę
WebSocket
to:źródło
Korzystanie z interfejsu API Window.URL - https://developer.mozilla.org/en-US/docs/Web/API/Window/URL
Działa z http (s), portami itp.
źródło
Zakładając, że Twój serwer WebSocket nasłuchuje na tym samym porcie, z którego żądana jest strona, proponuję:
Następnie, w swoim przypadku, nazwij to w następujący sposób:
źródło
łatwy:
źródło
/^http/
zamiast na'http'
wszelki wypadekhttp
wewnątrz paska adresu URL.Na hoście lokalnym powinieneś rozważyć ścieżkę kontekstu.
źródło
Na maszynie:
Stosowanie:
źródło
Dead easy rozwiązanie, WS i port, przetestowane:
źródło