小编arr*_*hiu的帖子

NSStream和Sockets,未调用NSStreamDelegate方法

我遵循了设置套接字流的指南,并在我的课程中有效地复制了该代码.无论我尝试什么代理方法,似乎都没有被调用.

在头文件中我(基本上):

@interface myClass : NSObject <NSStreamDelegate> {
    NSInputStream *inputStream;
    NSOutputStream *outputStream;
}
- (void)connect;
@end;
Run Code Online (Sandbox Code Playgroud)

连接方法:

- (void)connect {
    CFReadStreamRef readStream;
    CFWriteStreamRef writeStream;

    CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, (CFStringRef)@"host.example.com", 1234, &readStream, &writeStream);

    inputStream = (NSInputStream *)readStream;
    outputStream = (NSOutputStream *)writeStream;
    [inputStream setDelegate:self];
    [outputStream setDelegate:self];
    [inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
    [inputStream open];
    [outputStream open];
}
Run Code Online (Sandbox Code Playgroud)

也尝试使用CFStreamCreatePairWithSocketToCFHost()[NSStream getStreamsToHost:port:inputStream:outputStream:- 所有具有完全相同的结果.

我在connect方法的开头设置了一个断点,逐步遍历每一行,每个指针都有效,似乎指向正确的对象.

在GDB中,在setDelegate调用之后,按预期po [inputStream delegate]打印<myClass: 0x136380>,因此它已正确设置委托.

对于我的生活,我无法理解为什么它拒绝stream:handleEvent:在我班上调用这个方法:

- …
Run Code Online (Sandbox Code Playgroud)

objective-c nsstream

12
推荐指数
2
解决办法
2万
查看次数

Ruby条件赋值和私有方法

从下面的代码中可以看出,||=运营商正在从课外进行评估.

class Foo
  attr_reader :bar

  def baz
    self.bar ||= 'baz'
  end

  private

  attr_writer :bar
end

puts Foo.new.baz
# => in `baz': private method `bar=' called for #<Foo:0x007fd9720829a8> (NoMethodError)
Run Code Online (Sandbox Code Playgroud)

引用关于官方扩展的接受答案|| =条件赋值运算符:

In other words, the expansion c = c || 3 is (excluding bugs like in pre-1.9) correct.
Run Code Online (Sandbox Code Playgroud)

重写baz方法self.bar = self.bar || 'baz'不会引发错误.

我正在寻找关于Ruby 如何以及为什么以这种方式表现的明确答案,因为它似乎违反直觉.

这种行为出现在Ruby版本1.9.3,2.0.0和2.1.2上,这让我相信这不是一个错误.

ruby memoization

12
推荐指数
1
解决办法
214
查看次数

将Redis迁移到AWS Elasticache,停机时间最短

让我们首先列出一些事实:

  • Elasticache不能成为我现有Redis设置的从属设备.真正的耻辱,这将是非常有效的.
  • 我只有一台要迁移的Redis服务器,大约有3GB的数据.
  • 停机时间必须少于10分钟.我认为通常的"停止站点,停止redis,使用快照配置群集"将花费更长的时间.

与此问题类似:如何将elasticache redis群集设置为从属?

关于这可能如何工作的一个想法:

  1. 将Redis设置为使用AOF并同时触发BGSAVE.
  2. BGSAVE完成后,为Elasticache集群配置RDB种子.
  3. 停止该站点并关闭我的本地Redis实例.
  4. 使用aof-replay工具将AOF重放到Elasticache中.
  5. 再次启动站点,指向Elasticache集群.

我的问题:

  1. 我怎样才能保证我的AOF文件在RDB文件结束的时候开始,并且没有数据写入?
  2. 是否有Redis维护人员支持的AOF工具,或者它们都是第三方解决方案,因此(可能)可靠性有问题吗?*

*对于此类工具的任何作者都没有违法行为,我确信它们很棒,我只是对使用同一团队编写的工具更有信心,以避免潜在的兼容性错误.

data-migration amazon-web-services redis

10
推荐指数
1
解决办法
2921
查看次数