簡體   English   中英

客戶端(JS-瀏覽器)和服務器(PHP)通過 Web-Socket 通過 IP 通信

[英]Client(JS-Browser) and Server(PHP) communication over IP through Web-Socket

我是網絡套接字的新手。 我正在嘗試通過網絡套接字在客戶端和服務器之間建立通信。 我按照此鏈接中的代碼進行操作:

https://phppot.com/php/simple-php-chat-using-websocket/

這是我的嘗試:

  1. 客戶端JS端:

var ws = new WebSocket("ws://myIp:8090");

  1. 服務器PHP端:

定義('HOST_NAME',"myIP");
定義('端口',“8090”);

現在在瀏覽器中,當我去,

  1. http://localhost:8090 :瀏覽器中的初始握手請求標頭:

Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 Cache-Control: no-cache Connection: Upgrade Host: myIP:8090 Origin: http://localhost:8090 Pragma: no-cache Sec -WebSocket-Extensions:permessage-deflate; client_max_window_bits Sec-WebSocket-Key: tJ0fWdCEfJCUcmtRCNOJuQ== Sec-WebSocket-Version: 13 升級: websocket User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36

PHP Server 中的響應頭是:

HTTP/1.1 101 Web Socket協議握手升級:websocket連接:升級WebSocket-Origin:myIP WebSocket-Location:ws://myIP:8090/demo/shout.php Sec-WebSocket-Accept:DqaK+Z+jqf1lJ0vj5bIxFi7+EPc=

如上所述,請求和響應標頭都將它們的協議升級為 web-socket 並成功建立通信。

  1. http://myIP:8090 :

請求標頭在瀏覽器中:

顯示臨時標頭 Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 Cache-Control: no-cache Connection: Upgrade Host: myIP:8090 Origin: http://myIP:8090 Pragma:無緩存 Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits Sec-WebSocket-Key: D73LNcTLB8P6dzPilGipQQ== Sec-WebSocket-Version: 13 升級: websocket User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Safari/537.36

但是 PHP 服務器收到的請求標頭是:

GET / HTTP/1.1 Host: localhost:8090 Connection: keep-alive Upgrade-Insecure-Requests: 1 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0 .4280.66 Safari瀏覽器/ 537.36接受:text / html的,應用/ XHTML + xml的,應用/ XML; q = 0.9,圖像/ avif,圖像/ WEBP,圖像/ APNG,/ q = 0.8,應用/簽署交換; v =b3;q=0.9 Accept-Encoding: gzip, deflate Accept-Language: en-US,en;q=0.9 If-None-Match: W/"41e-5e6jpMk0FNkw+DjhkfcoeaiAhE4"

如上所示,PHP 服務器不會收到瀏覽器發送的 web-socket 升級標頭。 所以服務器在請求頭中沒有收到任何Sec-WebSocket-Key並得到這個錯誤:

ErrorException: Undefined index: Sec-WebSocket-Key

在創建響應標頭時。 我不知道如何解決這個問題? 請求標頭如何被修改? 我在設置中做錯了什么嗎? 此設置是否可以在兩台不同的 PC 上建立通信? 請幫忙。 提前致謝!

經過在這里和那里的一些嘗試后,我找到了通過相同或不同 PC 中的 Web 套接字進行通信的方法。

  1. 如果服務器和客戶端在同一台 PC 上: case 1將從上述問題中得到解決。
  2. 如果服務器和客戶端在不同的 PC 上:在客戶端(JS)端將 IP 地址設置為服務器 PC IP 將起作用。

客戶端JS端:

var ws = new WebSocket("ws://Server_PC_IP:8090");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM