php - WebSocket 可以连接到 Socket 服务器吗?

标签 php sockets nginx websocket

我想使用 PHP 和 nginx 实现一个简单的 WebSocket 服务器,我的印象如下:

  • 一旦 Websocket 通过了 RFC 6455 中描述的“协议(protocol)切换” ,它可以与任何标准(非“Web”)套接字服务器进行通信。
  • 根据nginx manual ,nginx可以进行前面提到的“协议(protocol)切换”。

  • 考虑到这一点,我尝试了以下由 JavaScript 客户端、nginx 配置和 PHP 服务器组成的简单实现(见下文)。
    结果:
  • PHP 服务器接收到包含 Connection: upgrade 的 WebSocket HTTP header , Sec-WebSocket-Key: ***和类似的领域。我认为这很好。
  • 但是,onopen事件永远不会在客户端上触发,这就是我卡住的地方。

  • 问题:
  • 我是否误解了一些细节,或者可能是它如何工作的整个概念?
  • 如何使我的代码示例工作?

  • Javascript 客户端:
    function socket() {
     
      var ws = new WebSocket("ws://socket/hello/");
      
      ws.onopen = function() {
        ws.send("Hello, World!");
      };
      
      ws.onmessage = function(event) { 
        console.log(event.data);
      };
      
    }
    
    socket();
    
    nginx配置:
      server {
        location /hello/ {
          proxy_pass http://localhost:10000;
          proxy_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection "upgrade";
        }   
        server_name socket;
        root socket;
      }
    
    PHP 服务器:
    (完全按照 PHP manual 中示例 #1 中的描述实现,仅将 $address 更改为 127.0.0.1。)

    最佳答案

    它可以,但前提是套接字服务器实现了 websocket 协议(protocol)。如果您询问它是否可以用作通用 TCP 或 UDP 套接字,它不能。句号。

    关于php - WebSocket 可以连接到 Socket 服务器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18791541/

    相关文章:

    php - Slim 3 框架 + Cookie

    c - 在 Windows 上使用 sys/socket.h 函数

    apache - Brew 安装 Httpd : Welcome to Nginx?

    php - 两个表插入 1 个 SQL 查询

    javascript - 如何使用 pidCrypt 进行 AES CBC 加密,然后使用 phpseclib 解密?

    php - 多个站点的 Linux 服务器子域

    C - 同时接收和处理来自 unix 套接字的数据

    java - 如何使用java socket实现客户端和服务器之间的文件传输

    node.js - Nginx、Node、Angular - 子文件夹 API/URL 配置

    django - Nginx 没有重定向到 Django