PHP Socket 帮助理解
Posted
技术标签:
【中文标题】PHP Socket 帮助理解【英文标题】:PHP Socket Help Understanding 【发布时间】:2012-11-29 01:00:50 【问题描述】:我试图了解一个套接字在 php 中是如何工作的。
假设我有一个名为socket.php
的文件,这会在端口 99 上创建一个绑定到我的本地主机的套接字。
然后我在while
循环中运行套接字,使其不断连接。
PHP 中是否有一个函数可以在监听时调用该套接字?
另一个问题是:如果我有另一个服务,例如Java running on a socket
——使用 PHP 连接到套接字进行调用是不是一个坏主意。我问是因为我可能会多次重新创建新的套接字连接。
那么在 PHP 中必须重新连接数百次套接字是不是很糟糕?或者我应该以某种方式重新使用相同的套接字连接? (我正在考虑对连接到 Java 套接字的 PHP 的 AJAX 调用)。
编辑:可以看示例代码:https://github.com/JREAM/sandbox/tree/master/php
我试图在 socket.php 和 socket_send.php 中进行通信——我让 socket.php 运行并打开另一个控制台并运行 socket_send.php 并尝试将结果输入控制台。
【问题讨论】:
请发布示例代码。目前尚不清楚您的意思或您如何执行socket_listen。可以使用另一个 PHP 脚本连接到端口 99 并将数据发送到侦听端口,而不管用于侦听该端口的服务是什么。以 SMTP 为例,你可以打开一个 PHP Socket 到 25 端口,并使用fread 和fwrite 在 SMTP 中与监听服务通信。 一个我用于 SMTP 脚本的小例子:function cmd($str, $report=true) //Assume connection to socket connection on $fp (File Stream Pointer) //Echo command, format it for socket, and write to stream global $fp; echo htmlspecialchars("> ".$str); echo "\n"; $ret = fwrite($fp, $str."\r\n"); if($report === true) echo htmlspecialchars(fread($fp, 512)); echo "\n"; /*else fclose($fp); echo "</pre>\n"; die("<b>ERROR:</b> Unable to write content to File Pointer Stream.\n"); */
我添加了一个链接,其中包含有关第一个问题的一些示例代码 - 给我一些时间来阅读其中的一些并认真思考:)
我在你的 socket.php 中没有看到任何 IF 语句会变为 TRUE,因此你永远不会执行 socket_read()
。 $read
或 $client
在哪里分配任何数组数据?
【参考方案1】:
回答您的第一个问题:我建议您仔细阅读here,您需要的关于套接字的一切都在那里。基本上,如果使用 UDP,您要使用的函数是 socket_read 或 socket_recvfrom。
回答您的第二个问题:套接字只是向服务发送消息的一种方式。客户端是否使用 php 而服务器使用 Java 并不重要。这样想吧。您在带有 windows Box 的 linux Web 服务器上查看网页是否重要?
【讨论】:
以上是关于PHP Socket 帮助理解的主要内容,如果未能解决你的问题,请参考以下文章
对SwooleWorkerman和php自带的socket的理解
对SwooleWorkerman和php自带的socket的理解