【发布时间】:2016-04-06 22:24:05
【问题描述】:
这是我的后端布局:通过与php_script 通信的 socket.io 套接字发出请求。 PHP 返回到 socket.io,它向php_script2 发送另一个请求,并回答有关原始请求的前端(到php_script)。 php_script2 在其算法中休眠并偶尔将数据发送回套接字层。当php_script2 正在运行时,当发出原始请求的同一用户尝试与套接字交互时,就会出现问题。 (前端在尝试向 socket.io 发送新信息时冻结)。这是:
1 - 用户发送输入
2 - socket.io 收到输入
3 - socket.io 使用以下选项将输入作为 http_request 发送到 php:
var options = {
host : 'localhost',
path : path,
method : method_type,
rejectUnauthorized: false,
requestCert: true,
agent: false,
headers : headers
};
4 - PHP (php_script) 处理请求并将反馈发送到套接字层
5 - 套接字层在 functionToPhp 中接收反馈,与用户套接字socket.emit("success") 交互并向php_script2 发出新的 php 请求,选项与之前相同
6 - 前端确认接收到数据包(php_script2 正在运行)并且如果用户尝试向需要与 php 进行新交互的套接字发送新信息,则前端元素冻结(在这种情况下为textarea,一旦从 socket.io 收到“成功”,它就会冻结但解冻)。它仅在 php_script2 结束其所有进程(包括睡眠)时解冻,而它应该解冻正确离开。
我这样做(nodejs->php->nodejs=>php->nodejs)正是因为我不希望用户对nodejs的原始请求被“卡住”,所以,就在第二个nodejs 层(在=> 之前)我向用户输出“成功”并从 nodejs 向 php 发出一个新请求,以模仿threading 并异步。不幸的是,这没有发生,用户仍在等待php_script2 结束后的回调。为什么这行得通?我了解服务器的工作原理,但我并不真正了解如果从本地主机的角度再次发出请求,它如何保持绑定。我希望我很清楚,tyvm 为您提供帮助...
【问题讨论】:
-
一些代码会很好。
-
我们需要代码,你的实现模式比解释你当前架构的大量文本要好得多......我也很困惑套接字是在哪里真正实现的,但哪种技术:NodeJS? PHP 套接字? 3rd 方 JavaScript 套接字?
标签: php node.js multithreading sockets