WebSocket 接続を行うときに、「クライアントは WebSocket プロトコルを使用していません: 'アップグレード' トークンが '接続' ヘッダーに見つかりません」というエラーが表示されることがあります。このエラーは通常、クライアントが WebSocket プロトコルを正しく使用していないことが原因で発生します。 WebSocket は、接続を確立するための特別なハンドシェイク プロセスを使用して、クライアントとサーバー間の双方向通信を可能にするプロトコルです。ハンドシェイク中に、クライアントは WebSocket プロトコルの使用を示すために「Upgrade」ヘッダーを適切に送信する必要があります。クライアントがこのヘッダーを正しく送信しない場合、サーバーは上記のエラーを返します。 PHP エディター Baicao は、WebSocket 接続をスムーズに進めるために、この問題を解決する方法をこの記事で詳しく紹介します。
goとJavaScriptフロントエンドで書かれたサーバーへのWebSocket接続を確立しようとしています。ディレクトリに次のファイルがあります:
main.go インデックス.html
**これは main.go
の私の go コードです: **
これは、index.html の HTML と JavaScript です:
リーリー ただし、go run main.go
を使用して実行すると、次のエラーが発生します:
ドイツ語の意味は「既存の接続はホスト ソフトウェアの制御により終了する」です
何かが欠けていますが、何が問題なのかを理解できるほど私の理解は深くありません。ご協力をよろしくお願いいたします。
私の JS WebSocket にアップグレードが欠けているのではないかと思いましたが、Chrome では、リクエスト URL ws://localhost:9100/ws の次のリクエスト ヘッダーに「upgrade:websocket」と表示されていることがわかります。
package main import ( "fmt" "log" "net/http" "github.com/gorilla/websocket" ) var upgrader = websocket.upgrader{ readbuffersize: 1024, writebuffersize: 1024, } func homepage(w http.responsewriter, r *http.request) { http.servefile(w, r, "./index.html") conn, err := upgrader.upgrade(w, r, nil) if err != nil { log.println("error in handler:", err) return } log.println("client connected.") for { messagetype, p, err := conn.readmessage() if err != nil { log.println("fehler in readmessage: ", err) return } log.println(string(p)) //echo message to client if err := conn.writemessage(messagetype, p); err != nil { log.println(err) return } } } func setuproutes() { http.handlefunc("/ws", homepage) } func main() { fmt.println("server gestartet") setuproutes() log.fatal(http.listenandserve(":9100", nil)) }
cerise limón さんの有益なコメントのおかげで修正することができました。問題は、ファイルのインデックス作成用に 1 つのエンドポイントが必要であり、WebSocket 用にもう 1 つのエンドポイントが必要であることです。そこで、関連する部分を次のように変更しました。 リーリー
以上がwebsocket: クライアントが websocket プロトコルを使用していません: 「接続」ヘッダーに「アップグレード」トークンが見つかりませんの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。