- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
因为我们可以将 socket.io 配置为使用 redis 来实现它的内部工作方式,如下所示:
var RedisStore = require('socket.io/lib/stores/redis')
, redis = require('socket.io/node_modules/redis')
, pub = redis.createClient()
, sub = redis.createClient()
, client = redis.createClient();
io.set('store', new RedisStore({
redisPub : pub
, redisSub : sub
, redisClient : client
}));
如何查看此 RedisStore 的内部以查看 socket.io 正在插入和删除的数据。我将 socket.io 配置设置为使用从 node-redis 安装的 redis 实例,如下所示:
redis = require('redis')
但我没有看到任何 socket.io 事件在进行,我想知道 socket.io 是否真的在使用 redis。我确实看到我的 cookie 存储在 redis 中,因为我将 express 和 connect 配置为使用 redis 作为 MemoryStore,但我没有看到任何与 socket.io 相关的内容。
最佳答案
对于本地 redis node.js 开发/调试,我这样做。
在后台启动 redis 服务器并在同一个 tty 中运行 cli 监视器:
redis-server &
redis-cli monitor -h host -p port
如果使用本地默认设置,您可以让-关闭。
您还可以运行一个 redis 从服务器,它回显所有主服务器命令,并将当前 redis 服务器的内存保存数据同步到默认为 ./dump.rdb 的文本文件中。该文件可以加载到 redis 中并使用文本编辑器查看。
redis-cli --slave -h host -p port
vim ./dump.rdb
基本的 node.js Passport session cookie 看起来像这样:
sess:L2C4MPtAUmlO4zHGkXnq4icuÃ@U@Z{"cookie":{"originalMaxAg null,"expiresÀhttpOnly":true,"path":"/"}passport L}
为了进一步帮助深入了解,您可能需要单步执行您的应用程序并在您的 Node 代码和 redis 驱动程序交互的区域放置断点。
您可以使用它来观察握手过程、查看不正确的数据交换、套接字问题等,方法是逐步执行您的函数,并观察控制流期间的状态变化。
此作业的 Node 应用程序是 Node 检查器。
它将允许您在类似的调试环境中查看您的应用程序运行情况到 Chrome 开发工具,您可以在其中设置断点以暂停、进入和退出功能,并及时向前移动直到下一个断点或异常触发暂停。
npm -g install node-inspector
当您在多个项目中使用它时,您可以使用“-g”全局开关安装它。
在终端窗口中不带任何选项运行程序会为我生成以下输出:
~/passaic-streaming git:weekend-refactor ❯❯❯
Node Inspector v0.7.0
Visit http://localhost:8080/debug?port=5858 to start debugging.
您可以使用 config 或 ENV 变量配置 HOST、PORT、DEBUG-PORT(DEBUG_PORT,端口5858,作为参数传递设置套接字连接在运行的 Node 进程和运行网络应用程序的浏览器之间。
现在,可以通过三种方式在 Debug模式下运行 node.js 代码。在第一次运行 node-inspector 之后执行此操作:
node --debug-brk app.js
node --debug app.js
node app.js // then send a SIGUSR1 to the node process:
// pgrep node
// kill -s USR1 PID
使用第一个命令“--debug-brk”,直到一切正常,因为它告诉您的代码在模块的第一行停止。
browser http://localhost:8080/debug?port=5858
根据您的应用大小,加载可能需要一些时间。但是一旦到达那里,您将拥有一个用于逐步执行代码的源选项卡和一个控制台选项卡。
'--debug' 可以在 Express 应用程序上正常工作,您可能只需要点击一个端点或进行一些事务或告诉它手动在断点处暂停。
一些 Node 脚本太快而无法被 Node 检查器监听器捕获,并且在您在源代码中设置断点之前,可以方便地在第一行中断,因此命令。
您还可以在以下区域周围放置 'node debugger';
行:
// connect to Redis for sessionStore
node debugger; // node-inspector will pause here.
redisClient = redis.createClient(
options.PORT, options.HOST, options.REDIS_OPTIONS));
您可能需要使用 SIGUSR1 而不是在 Debug模式下启动应用程序的主要原因是您使用的是 node.js 集群 API。
如果您尝试监控使用集群并创建多个 Node 进程的应用程序,那么如果您尝试在 Node < 0.11.x 中进行调试,您将看到套接字的这个问题:
Failed to open socket on port 5858, waiting 1000 ms before retrying
Failed to open socket on port 5858, waiting 1000 ms before retrying
在不稳定的 Node 版本中,child_process.fork 命令监听调试器端口 5858+1、59、60 等,具体取决于您拥有的工作人员。
目前在 Node 0.10.x 中,如果您需要检查集群应用程序中工作程序的状态,您必须以非“--debug”模式启动 Node ,而不是向进程发送 kill USR1 信号。
要使用 redis 强制退出 Node ,请将 node_redis 驱动程序置于 Debug模式:
redis = require('redis');
redis.debug_mode = true; //turn on debug mode
另外,如果你像这样开始使用 connect-redis 中间件:
DEBUG=* node app.js
然后你会看到像这样的connect-redis输出:
connect:redis SETEX "sess:FVDBpNoFDFIOkynFDLcpM6St" ttl:604799
{"cookie":{"originalMaxAge":604799991,"expires":"2014-03-08T22:38:32.620Z","httpOnly":true,"path":"/"},"passport":{"user":"52edfdfdf3da2rer0c06eb34"}} +50ms
最后,StrongOps/Strongloop 的团队内置了他们的部分命令行工具 node-inspector。
npm install -g strong-cli
slc debug app.js
它将启动 Node 检查器,将 Web 浏览器打开到适当的检查器,并且在最新的 Node 版本中——它理解集群。
关于node.js - 是否可以看到与 socket.io 捆绑在一起的 redis 模块内部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14596296/
我有一个要提交的 iOS 应用程序,我的应用程序在我的 iPhone 上运行。我将 apple id 帐户添加到 Xcode 并在 Xcode 的常规部分下输入我的 bundle id,然后单击“修复
我有一个SDK项目,它在gradle中引用了很多依赖项。我必须要求SDK用户在项目中使用SDK时添加这些依赖项。问题是,每当我添加一些新的依赖项或将当前的依赖项替换为新的依赖项时,我都必须要求用户进行
我使用 Microsoft.AspNet.Web.Optimization用于 css 和 js 捆绑和缩小的 nuget 包。 我在这个路径 ~/bundles/shared.css 中创建了一个包
我使用 laravel-mix(包括 webpack)来打包 JS 文件。使用 BundleAnalyzerPlugin,我发现我的输出文件包含多个 JQuery 库副本,这增加了输出文件的大小。 它
我正在使用 maven felix 插件来创建 OSGi 包,但是假设您有一个包“com.example”存在于project1和project2中。此外,project2 依赖于 project1。
当我尝试捆绑我的 Meteor 应用程序时,我得到: $ meteor bundle app.tgz Errors prevented bundling: Exception while bundli
因此查看 bundleconfig.cs 它应该允许基于设备类型进行捆绑。唯一的问题是因为它在 App_Start 中,所以不允许我访问 Request 对象。有什么想法可以实现基于设备的捆绑吗? 最
上下文 http://news.ycombinator.com/item?id=4125530 问题: 这是否最终意味着 Java 应用程序将能够发布到 Mac 商店? (因为 JRE 自动捆绑到应用
我正在尝试为一个 React/Redux 项目创建我自己的 Webpack 配置。配置看起来很好,但是包的大小很大(在开发模式下,我知道如何在生产模式下减少它) 我的 package.json 看起来
所以我一直收到这个 Bundle ID 错误,说它不可用而且我真的不知道如何修复它。这是错误: 提供的数据有误。请更正并重新提交。标识符为“com.team.AppName”的 App ID 不可用。
我正在浏览 SO 并找到了 some code这向我提出了一个问题。 struct node* BuildOneTwoThree() { struct node *list = malloc(3 *
我正在为 Delphi XE7 使用 intraweb XIV 捆绑版。当我在这个新的捆绑版本中测试一个 intraweb XII 应用程序时,SSL/TLS 不工作。捆绑版本不支持 SSL/TLS?
预期: 当我使用 webpack 构建时,我的所有 JS 文件都会被捆绑,除了 ./src/Portfolio 目录中的文件(根据我的 Webpack.config.js 设置)。 实际: Webpa
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 关闭 7 年前。 Improve
我有一个项目引用了许多开源库,有些是新的,有些不是很新。也就是说,它们都很稳定,我希望坚持使用我选择的版本,直到我有时间迁移到更新的版本(我昨天测试了 hsqldb 2.0,它包含许多 api 更改)
我正在创建一个 REST API,并且我一直在研究允许捆绑来自客户端的请求的想法。我所说的捆绑是指他们可以发送一个包含多个“真实”请求的请求,然后将它们一起交付给客户。通常是 javascript a
在我的 AngularJS 项目中,我有一个 HTML 模板,其中 innerText 位于新行中: Click here 我正在使用 webpack 作为我的捆绑器。我希望它 trim
我已经为我的应用程序创建了一个静态库。现在,我的应用程序使用我在应用程序中引用的 plists 和图像等来源。 如何捆绑这些图像并将它们与静态库一起交付,以及我需要在源加载代码中进行哪些更改才能从该
所以, 我是 webpack 的新手,我正在开发一个项目,在该项目中我们只加载一个文件 bundle.js,我知道我可以单独加载文件。 但我想要的是bundle.js中未缩小的文件。目前我正在获取缩小
如何使用用户区域设置登录路径?我试过了 check_path: /{_locale}/login_check 和 check_path: /(en|ru)/login_check 但什么也没有
我是一名优秀的程序员,十分优秀!