javascript - 创建 PHP websockets 服务器

标签 javascript php apache websocket

我是 websockets 技术的新手。我试图创建一个 websockets php 服务器并使用 javascript 客户端连接到该服务器。我正在使用 xampp 1.8.3。

我制作了这个简单的 PHP 服务器:

<?php 
    error_reporting(E_ALL);
    set_time_limit(0);

    $address = "127.0.0.1";
    $port = 1777;
    $maxConnections = 10;

    if(!($sock = socket_create(AF_INET, SOCK_STREAM, 0))){
        $errorCode = socket_last_error();
        $errorMsg = socket_strerror($errorCode);
        die("socket_create() failed -> {$errorCode}:{$errorMsg}\n");
    }
    echo "Server created.\n";

    if(!(socket_bind($sock, $address, $port))){
        $errorCode = socket_last_error();
        $errorMsg = socket_strerror($errorCode);
        die("socket_bind() failed -> {$errorCode}:{$errorMsg}\n");
    }
    echo "Server opened on {$address}:{$port}\n";

    if(!(socket_listen($sock, $maxConnections))){
        $errorCode = socket_last_error();
        $errorMsg = socket_strerror($errorCode);
        die("socket_listen() failed -> {$errorCode}:{$errorMsg}\n");
    }
    echo "Waiting for connections...\n";

    $client = socket_accept($sock);
    if(socket_getpeername($client, $address, $port)){
        echo "The client {$address}:{$port} is online.\n";
    }
    $msg = socket_read($client, 1024000);
    if(!(socket_write($client, $msg, strlen($msg)))){
        $errorCode = socket_last_error();
        $errorMsg = socket_strerror($errorCode);
        die("socket_write() failed -> {$errorCode}:{$errorMsg}\n");
    }
    echo "Message sent\n";

    socket_close($client);
    socket_close($sock);


?>

我使用以下表达式通过 xampp shell 运行了这个 php 文件:

php htdocs/server.php

我在 shell 上收到了这条消息:

php htdocs/server.php
Server created.
Server opened on 127.0.0.1:1777
Waiting for connections...

然后我在 chrome 上打开了 client.html(我支持 websockets)。 我的 client.html 代码是:

<html>
    <head>
        <meta charset="UTF-8" />
        <title>Websockets web-server connection</title>
    </head>
    <body>
        <p>Websockets connection. Status: <span id="status"></span></p>
        <script type="text/javascript">
            var webSockets = new WebSocket("ws://127.0.0.1:1777/");
            webSockets.onopen = function(){
                document.getElementById("status").innerHTML="connected";
                webSockets.send("ping");
            }
        </script>
    </body>
</html>

我在 javascript 控制台日志上收到了此消息:

WebSocket connection to 'ws://127.0.0.1:1777/' failed:  client.html:9

我的 shell 有以下消息:

php htdocs/server.php
Server created.
Server opened on 127.0.0.1:1777
Waiting for connections...
The client 127.0.0.1:64446 is online
Message sent

但是我没有在客户端收到任何消息,我什至没有获得连接状态。

发生了什么事?我的错误在哪里?

谢谢。

最佳答案

WebSocket 不是原始 TCP 套接字。它们需要相当复杂的类似 HTTP 的握手来建立连接,并且需要通过它们传输的数据以非常特殊的方式进行编码和构建。该协议(protocol)定义于 RFC 6455 .

除非你感到难以置信的受虐狂,否则你不想尝试自己实现这个。使用像 Ratchet 这样的库在 PHP 中实现 WebSocket。

关于javascript - 创建 PHP websockets 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25331042/

相关文章:

javascript - 对 Graph API 的 POST 请求因错误请求而失败

javascript - 与 lambda 函数参数混淆

php - 基本信息保存在cookie中还是一直在mysql中获取?

java - 将 RTF 文件转换为 DOC

apache - https tomcat 打开 https ://localhost:8443 but not using ip https://10. 217.14.97:8443

php - 使用 Apache .htaccess 设置动态 Php $_SERVER 值($_SERVER ['something' ])

javascript - 使用 Javascript 在逗号分隔的字符串中查找新值

java - Eclipse插件: JS Editor with non-file IEditorInput

php - 跨域认证

php - 从三个表中选择并显示结果