[英]Client(JS-Browser) and Server(PHP) communication over IP through Web-Socket
我是網絡套接字的新手。 我正在嘗試通過網絡套接字在客戶端和服務器之間建立通信。 我按照此鏈接中的代碼進行操作:
https://phppot.com/php/simple-php-chat-using-websocket/
這是我的嘗試:
var ws = new WebSocket("ws://myIp:8090");
定義('HOST_NAME',"myIP");
定義('端口',“8090”);
現在在瀏覽器中,當我去,
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 並成功建立通信。
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 套接字進行通信的方法。
case 1
將從上述問題中得到解決。客戶端JS端:
var ws = new WebSocket("ws://Server_PC_IP:8090");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.