php -如何在我的网络主机中创建套接字服务器

oyjwcjzk  于 2023-01-19  发布在  PHP
关注(0)|答案(2)|浏览(120)

我有一个网络主机,我想创建一个套接字连接与我的应用程序。我有这样的代码:

<?php
$host = "127.0.0.1";
$port = 25003;
// don't timeout!
set_time_limit(0);

if (!extension_loaded('sockets')) {
    die('The sockets extension is not loaded.');
}

// create socket
$socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socket\n");
// bind socket to port
$result = socket_bind($socket, $host, $port) or die("Could not bind to socket\n");
// start listening for connections
$result = socket_listen($socket, 3) or die("Could not set up socket listener\n");

// accept incoming connections
// spawn another socket to handle communication
$spawn = socket_accept($socket) or die("Could not accept incoming connection\n");
// read client input
$input = socket_read($spawn, 1024) or die("Could not read input\n");
// clean up input string
$input = trim($input);
echo "Client Message : " . $input;
// reverse client input and send back
$output = strrev($input) . "\n";
socket_write($spawn, $output, strlen($output)) or die("Could not write output\n");
// close sockets
socket_close($spawn);
socket_close($socket);
?>

当我运行该页面时,它返回“无法创建套接字”
我正在共享Web服务上运行代码
出了什么问题?2我该怎么修?

z5btuh9x

z5btuh9x1#

我在安装了XAMPP的机器上试用了你的代码,运行正常,它确实打开了那个端口,我通过putty用telnet测试了一下。回答你的问题,我想就像@Jon斯特林说的,你的主机不允许你创建套接字。这就是为什么主机公司出售主机包和虚拟专用服务器,如果你想绑定端口,你应该找一个VPS。

hmae6n7t

hmae6n7t2#

我相信你已经解决了这个问题,并移动工作,因为你张贴它,但作为一个人谁刚刚经历了这一点,我想指导大家谁土地在这里到这个页面:
https://www.php.net/manual/en/function.socket-select.php
我一直在寻找一种方法,让套接字服务器不消耗CPU周期,只在有事情要做时才做一些事情。这种解决方案在等待连接做一些事情时阻塞,然后处理它们。
请特别注意有关将$tv_sec设置为null的注解,因为这是防止耗尽CPU的“Make Work”标志。
这允许在PHP中创建一个套接字服务器,它不会占用CPU,并且还可以处理多个连接。
唯一缺少的一块拼图是断开那些不断开自身连接的客户端。
除非可以设置连接超时,否则我认为解决方案是将$tv_sec设置为某个合适的值,比如2秒,然后跟踪连接的时间,如果连接超时,则断开连接。这样做的缺点是它会占用CPU,但如果每2秒解锁一次,则可以使用它来处理超时等。否则,你必须依靠客户端断开连接。这对你来说可能不是问题,但在我的特殊使用情况下是。

相关问题