WebSocket可以连接到套接字服务器吗?

时间:2013-09-13 16:59:36

标签: php sockets nginx websocket

我想使用PHP和nginx实现一个简单的WebSocket服务器,并且给人以下印象:

  1. 一旦Websocket通过RFC 6455中描述的“协议交换机”,它就可以与任何标准(非“Web”)套接字服务器通信。
  2. 根据nginx manual,nginx可以执行上述“协议切换”。
  3. 考虑到这一点,我尝试了以下简单的实现,包括JavaScript客户端,nginx配置和PHP服务器(见下文)。

    结果:

    • PHP服务器接收包含Connection: upgradeSec-WebSocket-Key: ***和类似字段的WebSocket HTTP标头。我认为这很好。
    • 但是,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。)

1 个答案:

答案 0 :(得分:2)

它可以,但仅当套接字服务器实现websocket协议时。如果您询问它是否可以用作通用TCP或UDP套接字,则不能。完全停止。