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 即可见到服务器返回的结果。