PHP中如何保存资源类型?

目前在写一个小项目。本人只是一个前端工程师,现在临时写一个PHP脚本。
流程是前端发送数据到服务器,然后服务器通过socket通信发送数据到设备上,然后再依次从设备发送到前端。
目前数据交互功能已经完成。但是有一个数据是需要频繁从设备发送到前端的,
所以我们希望在 服务器和设备的通信是时刻保持畅通的,这样就能避免每次发送消息都要`socket_creat(),socket_connect()` 。
我起初的想法是将创建的$socket 用session保存起来。但是发现session是不能保存资源类型的。
所以在此想向各位大神请教一下,如何将资源类型保存下来,或者有什么好方法能避免每次发送消息都得创建socket。
阅读 4.5k
2 个回答

不能保存资源类型,资源类型只是一个引用,引用的对象没了你保存这个引用本身也没意义。
你的需求看得不是很明白,如果是要实现一个socket server可以使用开源方案(如Workerman, Swoole)或者自己写。
官方有个简单的例子参考一下:
http://php.net/manual/zh/sockets.examples.php

既然问题在于服务器端需要保持(注意并不是保存!)这个socket连接,解决你的问题只需要使用长连接的socket。
workerman和swoole的框架就是用的长连接
长连接和短连接的区别:
http://www.php.cn/php-weizijiaocheng-363026.html

相比短连接:
长连接的服务器端socket长连接主要加上了这四句:

set_time_limit(0);   //设置无超时
socket_set_option($socket,SOL_SOCKET,SOL_REUSEADDR,1);//对端口复用
socket_set_nonblock($socket);//设置无阻塞

socket_select();

然后设置心跳包保持连接就好~

客户端则多了掉线检验、收发心跳应答之类的功能~

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题