小编the*_*ebe的帖子

redux-saga takeLeading 动作加上附加参数

我已经实现了一个 redux 效果takeLeading,如果 saga 当前正在运行,它将忽略后续操作:

export const takeLeading = (patternOrChannel, saga, ...args) => fork(function*() {
  while (true) {
    const action = yield take(patternOrChannel);
    yield call(saga, ...args.concat(action));
  }
});
Run Code Online (Sandbox Code Playgroud)

我在我的应用程序中使用它来获取 API,其中我的 API 中的每个端点都有自己的操作类型。所以对于GET方法来说,如果请求已经在应用程序的其他地方被分派,那么阻塞是很有用的。传奇看起来像:

return function* () {
    yield all([takeLeading(GET_USER_ID, callApiGen), takeLeading(GET_WIDGET_ID, callApiGen)]);
}
Run Code Online (Sandbox Code Playgroud)

明显的问题是,如果我想获得两个不同的用户 ID,第二个将被阻止,因为它也有操作类型 GET_USER_ID。除了为每个可能的参数制定不同的操作之外,有没有一种方法可以实现一些takeLeadingForFunc(<action>, (action) => <id>, saga)让我保持为每个请求类型指定一个效果的简洁格式,但允许我在不同时不阻塞<id>?我试图总结takeLeadingtakeEvery实现的东西,但不能完全得到它。

编辑:

我有这样的工作:

export const takeLeadingForFunc = (f) => (patternOrChannel, saga, ...args) => fork(function*() {
  let takeLeadings = {};
  while …
Run Code Online (Sandbox Code Playgroud)

ecmascript-6 redux redux-saga react-redux

6
推荐指数
0
解决办法
1450
查看次数

Android WiFi直接服务发现和电池寿命

我正在尝试使用Wifi P2P NSD在手机和"集线器"(服务器和客户端)之间共享一个小字符串

由于手机移动并且集线器将位于固定位置(想想信标),因此手机不断宣传其服务及其DNS记录将是理想的选择.我执行以下操作:

mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
mChannel = mManager.initialize(this, getMainLooper(), null);
mRecord = new HashMap<String, String>();
mRecord.put(AppConstants.RECORD_KEY, val);
mService = WifiP2pDnsSdServiceInfo.newInstance(
    AppConstants.SERVICE_INSTANCE, AppConstants.SERVICE_REG_TYPE, mRecord);

mManager.addLocalService(mChannel, mService, addServiceListener);
mManager.setDnsSdResponseListeners(mChannel, dnsSdServiceResponseListener,
    dnsSdTxtRecordListener);
mManager.addServiceRequest(mChannel, mRequest, addServiceRequestListener);

mManager.discoverServices(mChannel, serviceDiscoveryListener);
Run Code Online (Sandbox Code Playgroud)

在调用discoverServices之后,服务在框架上似乎是永久性的(除非我清除它或关闭通道/重置wifi).

但是,我正在燃烧一大堆电池.仅仅看一下系统的电池偏好,似乎Google Play服务正在燃烧我的大部分电池,而没有任何东西归功于"Wifi"组件.此外,在我的基线状态(飞行模式,屏幕关闭,wifi开启但空闲),手机下降到大约20mA,而在执行上述代码一次后,它不会低于~130mA电池消耗.

我的问题是,究竟是什么消耗电池?只是支持框架保持wifi或手机清醒,有什么办法吗?我只是感到困惑,因为电池耗尽似乎并没有归因于wifi组件的任何非空闲.

android battery service-discovery power-management wifi-direct

5
推荐指数
0
解决办法
793
查看次数

BlueZ/Pybluez - 连接到外围设备时进行蓝牙 LE 扫描

简短的问题:是否有可能在定期连接到某些和读取特征的同时扫描 LE 设备 a) 通常[协议允许它]和 b) 使用 BlueZ 堆栈?

长问题:我正在编写一个 Python 脚本来扫描广告某个 UUID 的 LE 设备。如果找到,我们应该连接,读取特定的特征值(调用 this ValueA),然后断开连接。这个想法是维护一个存在的实时列表ValueA。我希望能够生成一个线程来启动 LE 扫描并将广告事件收集到线程安全容器中。当发现新设备时,应触发处理程序以读取ValueA.

我使用 PyBluez 和BluePy(连接到外围设备)的努力失败了。当我使用终端命令(sudo hcitool lescan --duplicates以及sudo gatttool -I随后的连接和读取指令),这些失败,如果我尝试我开始扫描(扫描可放弃)后连接

我很困惑,因为我注意到如果我gatttool在开始 LE 扫描之前通过连接到设备,我可以开始扫描并继续阅读ValueA而不影响扫描,但反之则不然。

任何见解或好的 BlueZ 编程文档将不胜感激。在 Ubuntu 14.10 Macbook Pro 上使用 BlueZ 4.1

python bluetooth-lowenergy bluez

5
推荐指数
1
解决办法
9449
查看次数

从另一个VPC访问私有RDS数据库

我正在尝试使用对等连接从不同的VPC访问私有RDS实例.我有两个VPC:

  1. 172.20.0.0/16带有一个公有子网的VPC-K8S()
  2. 172.17.0.0/16带有一个公有子网(172.17.0.0/24)和3个私有子网(172.17.{1,2,3}.0/24)的VPC-RDS ()

VPC-RDS有2个安全组(不是实际名称):

  1. default,从我的IP接受SSH
  2. db,它接受来自default安全组的端口5432上的TCP .

在私有子网中创建数据库子网组后,我将数据库实例部署在VPC-RDS中,并将其配置为不可公开访问.要从我的工作站访问它,我使用default安全组在VPC-RDS的公共子网中创建一个小实例,并创建一个SSH隧道:

ssh -L 5432:rds-host-name.us-east-1.rds.amazonaws.com:5432  -i "KeyName.pem"  ec2-user@ec2-host-name.compute-1.amazonaws.com
Run Code Online (Sandbox Code Playgroud)

我可以通过localhost从我的工作站访问RDS.

我希望能够从我的Kubernetes集群(VPC-K8S)访问我的RDS实例.我建立两者之间的对等连接,并配置路由表适当地(在VPC-K8S:172.17.0.0/16 -> pcx-112233; VPC-RDS: 172.20.0.0/16 -> pcx-112233)

我无法从我的一个K8S节点或K8S VPC中的任何实例连接到RDS.我怀疑它与db安全组有关,但即使我打开端口5432到所有IP(0.0.0.0/0)它也没有帮助.

任何想法如何做到这一点,或者这只能通过公共可访问的RDS实例或VPC-RDS和defaultSG中的Bastion主机实现?

postgresql ssh amazon-web-services amazon-rds amazon-vpc

4
推荐指数
1
解决办法
1493
查看次数