【问题标题】:php socket_write over blocking and non-blocking socketsphp socket_write 覆盖阻塞和非阻塞套接字
【发布时间】:2012-04-12 18:43:57
【问题描述】:

我正在编写通过 unix 本地套接字与服务器通信的 php 脚本。 1) 连接 2) 使用 socket_write() 发送消息(90% 的时间是小块,10% 是大块) 3) 得到答案 4) 关闭连接

现在,我有简单的 socket_write() 实现,如 comments from php manual "jean at briskula dot si 03-Feb-2011 03:00" 建议的那样

似乎它在阻塞模式下工作正常,但我想为 socket_write 实现超时,因此我认为(需要)在调用 socket_write() 时使用非阻塞模式。

阻塞模式比非阻塞模式有什么优势吗? 是否有理由实现超时? 如何正确认识它们? 有什么例子吗?

尝试在while循环上写,但得到===FALSE,可能每次调用socket_write()之前都需要socket_select()?

ps。从服务器读取答案时,这个问题对于 socket_read() 也是实际的

【问题讨论】:

    标签: php sockets unix


    【解决方案1】:

    对于 PHP(面向 Web)脚本,通过套接字向后端系统发送数据/从后端系统接收数据,同时没有机会进行其他处理(这基本上是您希望在第一名),处理非阻塞模式引起的并发症是没有意义的。

    所以,坚持使用阻塞模式。

    【讨论】:

    • 谢谢,但是当请求由于某种原因会变长(无限)并且这会阻塞 c++ 服务器的线程时,我能做些什么呢?我觉得某处需要添加超时......也许在c ++方面,但如何? SO_LINGER?
    • 如果您担心 C++ 端,请使用非阻塞套接字来查询数据,实现某种形式的超时。这个答案只是指等式中面向 PHP 的一面。有关非阻塞 I/O 的(正确)用法,请查看 stackoverflow.com/questions/6715736/… 示例。
    • 谢谢,暂时保持原样,因为 select() 的解决方案不好,需要重写现有程序中的所有线程逻辑。也许在功能上会读到一些关于整个套接字超时的东西。在我看来,SO_LINGER 对此负责。并且冻结 recv 或 send 的线程永远不会阻塞。
    猜你喜欢
    • 1970-01-01
    • 2010-10-31
    • 2013-10-15
    • 1970-01-01
    • 2017-04-18
    • 2012-06-13
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多