【发布时间】:2011-03-27 02:32:49
【问题描述】:
我有一个聊天程序,它通过 TCP 套接字将 JSON 数据从 Apache/PHP 推送到 Node.js:
// Node.js (Javascript)
phpListener = net.createServer(function(stream)
{
stream.setEncoding("utf8");
stream.on("data", function(txt)
{
var json = JSON.parse(txt);
// do stuff with json
}
}
phpListener.listen("8887", 'localhost');
// Apache (PHP)
$sock = stream_socket_client("tcp://localhost:8887");
$written = fwrite($sock, $json_string);
fclose($sock);
问题是,如果 JSON 字符串足够大(超过 8k 左右),输出消息会被分成多个块,并且 JSON 解析器会失败。 PHP 返回 $written 值作为字符串的正确长度,但数据事件处理程序触发两次或更多次。
我应该将函数附加到不同的事件,还是有办法在事件触发时缓存文本,在重负载下不会屈服于竞争条件?还是我没有想到的其他解决方案?
谢谢!
【问题讨论】:
标签: php apache sockets stream node.js