«

php socket实现简单的http服务器

时间:2024-2-20 11:02     作者:韩俊     分类: PHP


php socket 实现简单的http服务器。

<?php

function run() {
    //创建服务端的socket套接流,net协议为IPv4,protocol协议为TCP
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    /*绑定接收的套接流主机和端口,与客户端相对应*/
    if (socket_bind($socket, "0.0.0.0", 9502) == false) {
        echo 'server bind fail:' . socket_strerror(socket_last_error());
        exit();
    }
    //监听套接流
    if (socket_listen($socket, 4) == false) {
        echo 'server listen fail:' . socket_strerror(socket_last_error());
        exit();
    }
    //非阻塞
    socket_set_nonblock($socket);
    call_user_func('onAccept', $socket);
}

function onAccept($socket) {
    //接收客户端传递过来的信息
    while (true) {
        $accept_resource = socket_accept($socket);
        if ($accept_resource !== false) {
            $string = socket_read($accept_resource, 1024);
            echo 'server receive is :' . $string . PHP_EOL;
            if ($string != false) {
                call_user_func('onMessage', $accept_resource);
            }
        }
    }
}

function onMessage($connection) {
    //拼装返回的html内容
    $content = '<html><title>hello,world</title><body>hello,world,http</body></html>';
    //拼装头信息
    $header = '';
    $header .= "HTTP/1.1 200 OK\r\n";
    $header .= "Date: " . gmdate('D, d M Y H:i:s T') . "\r\n";
    $header .= "Content-Type: text/html;charset=utf-8\r\n";
    $header .= "Content-Length: " . strlen($content) . "\r\n\r\n";//必须2个\r\n表示头部信息结束
    $header .= $content;
    socket_write($connection, $header, strlen($header));
}

run();

然后通过浏览器访问:http://localhost:9502 即可见到服务器返回的结果。

标签: php php教程

热门推荐