2010-04-25 100 views
1

即时通讯使用连接到我的PHP脚本中的服务器,用fsockopen()打开,我希望它在不同的页面之间共享,所以我序列化它并将它保存在会话变量中,但似乎这是一个坏主意,因为当我这样做没有发生...... 甚至没有一个错误。 问题是,这种连接需要握手,所以我不能重新连接每次一种在多个页面之间共享fsockopen()的返回值的方法?

另一个问题,什么是fsockopen的超时或连接保持活着,如果。调用它的原始PHP脚本已关闭?

编辑︰// 我有一个脚本运行很长时间,所以它可能会保持打开,但我最初的问题,我可以通过$ _Session共享句柄,如果是的,我需要序列化它? ,因为如果我回应处理它不是一个整数

回答

3

当你打开PHP脚本返回,进程“死亡”,你的套接字与它一起,你不能保存在会话数据。您可以从句柄保存整数值,但在下一页加载并运行时将不再有效。

+0

你确定它是一个整数吗? – Chilln 2010-04-25 11:11:43

+1

不,我只是想指出,当您创建页面退出时,您在页面之间保存的对象毫无意义。 对不起。 – 2010-04-25 11:17:39

2

fsockopen正在打开网络套接字。

当打开该套接字的PHP脚本结束时,由其打开的套接字是丢失:您无法从其他脚本中重新使用它们。

如果您希望几个不同的页面使用该套接字,则除了为每个脚本重新打开它之外,没有其他方法,即使这需要时间。


另一个(复杂得多)解决方案可能是有:

运行的后台程序,在后台,并连接到远程服务
    • 一个脚本,该脚本总是运行(或至少很长一段时间)
    • 其他脚本将信息发送到该守护程序,而不是尝试连接到服务
    • 和守护进程,它总是连接,发送这些信息给它连接到

    这是一个比较复杂的远程服务,就像我说的...但它应该工作得很好:-)

    请注意,使用守护进程以及所有可能需要访问服务器命令行的所有内容:如果只运行,则无法执行(或不是那么好)来自Apache的PHP。

  • 相关问题