Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过多个请求识别PHP套接字_Php_Sockets_Session_Udp_Client - Fatal编程技术网

通过多个请求识别PHP套接字

通过多个请求识别PHP套接字,php,sockets,session,udp,client,Php,Sockets,Session,Udp,Client,我正在制作一个PHP api,它创建了一个与Java SocketServer的客户端套接字连接。这将用于一个聊天应用程序,用于学习 所以我现在正在设置整个api,我有点想知道应该如何识别我的套接字。要存储套接字,我计划将其存储在$\u会话中。我已经读到套接字id不是识别它的好方法 在会话中存储套接字的最佳方式是什么?我可以提供一些代码示例吗 提前谢谢 不能在请求之间“存储”套接字,它就是不能这样工作 您可以通过该套接字发送会话ID(或其他类似令牌),以便接收端(您的Java应用程序)可以通过会

我正在制作一个PHP api,它创建了一个与Java SocketServer的客户端套接字连接。这将用于一个聊天应用程序,用于学习

所以我现在正在设置整个api,我有点想知道应该如何识别我的套接字。要存储套接字,我计划将其存储在$\u会话中。我已经读到套接字id不是识别它的好方法

在会话中存储套接字的最佳方式是什么?我可以提供一些代码示例吗

提前谢谢

不能在请求之间“存储”套接字,它就是不能这样工作

您可以通过该套接字发送会话ID(或其他类似令牌),以便接收端(您的Java应用程序)可以通过会话ID识别不同的客户端。

您可以尝试以下方法: 1) 制作一个独立的php,创建一个套接字客户端,然后启动一个Infive循环: 2) 在每个循环中,它都会使用令牌id检查chat_表,以指示聊天会话 3) 如果有来自用户的新消息,您的php会通过套接字连接将其发布给他们 4) usleep(200000);//

因此,如果可以接受,您的主php将通过exec()启动这些独立php,如:

使用这些argumants“&”将在后台处理此过程,您的主php将不会等待该行。 在您的client.php上,您可以使用以下命令创建$sessionId:

$sessionId = $_SERVER['argv'][1];

在预定义的过期时间之后,Infive looped client.php可以自行停止。表中没有它中断的会话的活动。

Hey@Timon,除非此处缺少一些信息,否则您将无法在$\u会话中存储套接字-套接字是一种类似于文件句柄的资源。由于不同的请求可能由不同的工作进程(不能共享句柄)处理,因此不能存储这些资源以供以后使用。如果您需要在请求之间持久化标识,那么将PHP会话ID转发到Java服务器可能是一种更好的方法,这样您就可以恢复会话状态,即使套接字不是当前状态same@Timon为什么不在套接字ID上绑定一些salt(唯一ID),然后使用一些加密技术呢。这将保存您的套接字id,您可以很容易地识别它。希望它对您有用您将无法(如果不是很难实现的话)在不同的编程平台之间共享会话。我建议您使用消息队列系统,例如执行消息的推拉操作。顺便说一句,它已经具备了使用laravel创建新的PHP聊天应用程序所需的一切
$sessionId = $_SERVER['argv'][1];