gpt4 book ai didi

javascript - 客户端(JS-Browser)和服务器(PHP)通过 Web-Socket 通过 IP 进行通信

转载 作者:行者123 更新时间:2023-12-03 07:12:29 24 4
gpt4 key购买 nike

我是网络套接字的新手。我正在尝试通过 web-socket 建立客户端和服务器之间的通信。我遵循此链接中的代码:
https://phppot.com/php/simple-php-chat-using-websocket/
这是我的尝试:

  • 客户端JS端:

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


  • 服务器 PHP 端:

  • define('HOST_NAME',"myIP");
    define('PORT',"8090");


    现在在浏览器中,当我去的时候,
  • http://localhost:8090 : 浏览器中的初始握手请求 header :

  • Accept-Encoding: gzip, deflateAccept-Language: en-US,en;q=0.9Cache-Control: no-cacheConnection: UpgradeHost: myIP:8090Origin: http://localhost:8090Pragma: no-cacheSec-WebSocket-Extensions: permessage-deflate; client_max_window_bitsSec-WebSocket-Key: tJ0fWdCEfJCUcmtRCNOJuQ==Sec-WebSocket-Version: 13Upgrade: websocketUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36


    PHP 服务器中的响应 header 是:

    HTTP/1.1 101 Web Socket Protocol HandshakeUpgrade: websocketConnection: UpgradeWebSocket-Origin: myIPWebSocket-Location: ws://myIP:8090/demo/shout.phpSec-WebSocket-Accept:DqaK+Z+jqf1lJ0vj5bIxFi7+EPc=


    如上所述,请求和响应 header 都将它们的协议(protocol)升级为 web-socket 并成功建立通信。
  • http://myIP:8090 :

  • 请求 header 在浏览器中:

    Provisional headers are shownAccept-Encoding: gzip, deflateAccept-Language: en-US,en;q=0.9Cache-Control: no-cacheConnection: UpgradeHost: myIP:8090Origin: http://myIP:8090Pragma: no-cacheSec-WebSocket-Extensions: permessage-deflate; client_max_window_bitsSec-WebSocket-Key: D73LNcTLB8P6dzPilGipQQ==Sec-WebSocket-Version: 13Upgrade: websocketUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36


    但 PHP 服务器收到的请求 header 是:

    GET / HTTP/1.1Host: localhost:8090Connection: keep-aliveUpgrade-Insecure-Requests: 1User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,/;q=0.8,application/signed-exchange;v=b3;q=0.9Accept-Encoding: gzip, deflateAccept-Language: en-US,en;q=0.9If-None-Match: W/"41e-5e6jpMk0FNkw+DjhkfcoeaiAhE4"


    如上所示,PHP 服务器没有收到浏览器发送的 web-socket 升级 header 。所以服务器没有收到任何 Sec-WebSocket-Key在请求 header 中并收到此错误: ErrorException: Undefined index: Sec-WebSocket-Key在创建响应 header 时。我不知道如何解决这个问题?请求 header 如何被修改?我在设置中做错了吗?这种设置能否在两台不同的 PC 上建立通信?请帮忙。提前致谢!

    最佳答案

    经过这里和那里的一些尝试,我找到了通过相同或不同 PC 中的 Web 套接字进行通信的方法。

  • 如果服务器和客户端在同一台电脑上:case 1将从上述问题中解决。
  • 如果服务器和客户端在不同的 PC 中:在客户端(JS)端将 IP 地址设置为服务器 PC IP 将起作用。

  • 客户端JS端:

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

    关于javascript - 客户端(JS-Browser)和服务器(PHP)通过 Web-Socket 通过 IP 进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64939778/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com