我有一个玩具Netty服务器,我试图在他们的频道上没有发生任何事情时向客户发送心跳消息.我通过telnet到服务器,写一条消息然后不发送任何东西来测试这个,但我没有听到任何声音!
安慰:
>>telnet localhost 6969
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
>>foo
Did you say 'foo'?
Run Code Online (Sandbox Code Playgroud)
MyPipelineFactory.java
public class MyPipelineFactory implements ChannelPipelineFactory {
private final Timer timer;
private static final ChannelHandler stringDecoder = new StringDecoder();
private static final ChannelHandler stringEncoder = new StringEncoder();
private final ChannelHandler idleStateHandler;
public MyPipelineFactory(Timer t) {
this.timer = t;
this.idleStateHandler = new IdleStateHandler(timer, 5, 5, 5);
}
public ChannelPipeline getPipeline() {
// create default pipeline from static method
ChannelPipeline pipeline = Channels.pipeline(); …Run Code Online (Sandbox Code Playgroud) 除了一种情况外,推送通知对我来说非常有用。我们正在开发的应用程序需要您登录/注销,因此当您登录时,服务器会向您发送通知,而当您未登录时,它不应该。
如果用户在登录时删除了该应用程序,则服务器不知道该用户已删除该应用程序。如果应用程序保持删除状态并且服务器尝试发送通知,则这不是问题 - 服务器端的 APNS 反馈机制捕获到并关闭会话。
如果用户重新安装应用程序怎么办?从服务器的角度来看,它们仍处于登录状态。在应用程序启动时,您可以向服务器发送注销消息。如果您不启动应用程序怎么办?该应用程序仍会看到通知进来!
这是我不应该担心的愚蠢边缘情况吗?或者有没有公认的方法来解决这个问题。
尝试1,香草链接到图书馆
我正在尝试使用修补版本的OpenSSL(因此DTLS更易于使用).OpenSSL在
/usr/local/openssl-1.0.1c
Run Code Online (Sandbox Code Playgroud)
./include/openssl子文件夹有大量的头文件(我认为应该这样):
lrwxrwxrwx 1 root root 22 Dec 25 05:49 aes.h -> ../../crypto/aes/aes.h
lrwxrwxrwx 1 root root 24 Dec 25 05:49 asn1.h -> ../../crypto/asn1/asn1.h
lrwxrwxrwx 1 root root 28 Dec 25 05:49 asn1_mac.h -> ../../crypto/asn1/asn1_mac.h
...
Run Code Online (Sandbox Code Playgroud)
GCC链接到include文件夹并给我一个错误 - 它无法找到SSL.我或多或少地和其他人一样使用它.这适用于OSX(10.6),但不适用于Ubuntu:
~$ gcc -L/usr/local/openssl-1.0.1c/include -lssl -lcrypto -o server server.c
server.c:20:25: fatal error: openssl/ssl.h: No such file or directory
compilation terminated.
Run Code Online (Sandbox Code Playgroud)
尝试2,/ usr/include中的库的符号链接
那么,我尝试在/ usr/include中创建一个指向OpenSSL的符号链接:
sudo ln -s /usr/local/openssl-1.0.1c/include/openssl /usr/include/openssl
Run Code Online (Sandbox Code Playgroud)
并重新尝试编译:
~$ gcc -L/usr/local/openssl-1.0.1c/include -lssl -lcrypto -o server server.c …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用cocoaasyncsocket库附带的echo服务器示例的修改版本执行以下操作:
1)打开与作为服务器的python脚本的连接
2)发送数据//工作,但委托不激活
3)接收数据//委托不激活
4)断开//不断开,显然还在我的帖子里
目前,我在didFinishLaunchingWithOptions委托中打开一个连接,然后尝试在didConnectToHost委托中发送数据.然后,我尝试读取从客户端返回的数据,然后断开连接.
我能够打开一个连接并发送数据(服务器验证为收到),但didWriteDataWithTag委托永远不会触发.但是,服务器接收数据.然后服务器会激活一些数据,但didReadData也不会触发.
除了读/写代理没有触发的事实,似乎我组织我的代码的方式不对,但我不确定这在事件驱动的系统中看起来如何与运行循环相反(我'在事件驱动的东西+网络新手.如果我的一系列行动的各自的完成是由他们的代表触发的,那么代表们是否应该分享某种消息 - 即我们收到了"xxx"消息,请回写"yyy"?我更喜欢有一个功能来管理所有这些.这样做有规范的方法吗?
IPhoneConnectTestAppDelegate.m(片段)
- (void)localConnect {
NSError *error = nil;
if (![asyncSocket connectToHost:@"localhost" onPort:5000 error:&error]) {
DDLogError(@"Error connecting: %@", error);
}
}
- (void)disconnect {
[asyncSocket setDelegate:nil];
[asyncSocket disconnect];
[asyncSocket release];
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Setup our socket (GCDAsyncSocket).
dispatch_queue_t mainQueue = dispatch_get_main_queue();
asyncSocket = [[GCDAsyncSocket alloc] initWithDelegate:self delegateQueue:mainQueue];
[self localConnect];
// Add the view controller's view to the window and display.
[window addSubview:viewController.view];
[window makeKeyAndVisible];
} …Run Code Online (Sandbox Code Playgroud) 我想长按启动模式视图,然后在取消长按时关闭模式视图。我该怎么做呢?
有没有办法告诉模态视图一个手势已经开始;我想让您识别此手势或触摸的结束/取消吗?
ViewController.swift
import UIKit
class ViewController: UIViewController, UIGestureRecognizerDelegate {
var buttonView:UIView!
var longPressRecognizer:UILongPressGestureRecognizer!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.longPressRecognizer = UILongPressGestureRecognizer(target: self, action: "longPressed:")
self.longPressRecognizer.delegate = self
self.view.addGestureRecognizer(self.longPressRecognizer)
// Add a button
buttonView = UIView(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 100))
buttonView.userInteractionEnabled = true;
buttonView.backgroundColor = UIColor.grayColor()
self.view.addSubview(buttonView)
}
func longPressed(recognizer: UILongPressGestureRecognizer) {
let point: CGPoint = recognizer.locationInView(self.view)
if let pressedView = …Run Code Online (Sandbox Code Playgroud) 对于文本查询"major + histocompatibility + complex + class + II + antigens",我使用web和api接口得到不同的结果.有没有办法使用api获得与Web界面相同的结果?
使用Web界面查询:
用api查询:
我查看了api参考(http://en.wikipedia.org/w/api.php)和关于SO的问题(http://stackoverflow.com/questions/1397938/is-there-any-api-in- java-to-access-wikipedia-data)但是他们都没有处理这个问题.opensearch api是否使用不同的搜索引擎?
我已经整合了一个简单的集群,其中包含几个可以很好地交互的部署,dns可以工作等等.但是,由于我正在使用部署,而且我有一些我在文档中找不到的问题.
如何使用部署文件的新副本非破坏性地更新部署?我有编辑和替换,但我真的想直接传入文件的更改字段(版本,图像,端口等)
将部署作为服务公开的首选方法是什么?有一个独立的文件,有一个暴露命令......我还应该考虑其他什么?是否可以将服务捆绑到部署文件中?
我也用UITextView看过这个.显然,我遗漏了一些非常基本的东西.
我试过: - 将textsize设置为small - UITextField:设置1行,不调整大小 - 删除移动texfield的功能
import UIKit
class XViewController: UIViewController, UITextFieldDelegate, UIGestureRecognizerDelegate {
// UI elements
let cancelButton = UIButton()
let okButton = UIButton()
var image:UIImage?
var previewImageView:UIImageView = UIImageView()
let textField = UITextField()
let tapGestureRecognizer = UITapGestureRecognizer()
let textFieldTypingPositionY:CGFloat = 200
var textFieldActualPositionY:CGFloat!
let textFieldHeight:CGFloat = 40
var draggingTextField:Bool = false
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
setupTextField()
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange, replacementString text: String) …Run Code Online (Sandbox Code Playgroud) 我使用本地策略遇到了passport.js的问题.我有两个具体问题:
问题1:
使用库中的参考代码:
https://github.com/jaredhanson/passport-local/blob/master/examples/login/app.js
我做了一系列命令来显示已登出和已登录:
A.支票/账户,未登录
curl -v localhost:3000/account
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,我得到了一个重定向到/ login
<p>Moved Temporarily. Redirecting to <a href="http://localhost:9292/login">http://localhost:3000/login</a></p>
Run Code Online (Sandbox Code Playgroud)
B.登录
curl -v -d "username=bob&password=secret" http://127.0.0.1:3000/login
Run Code Online (Sandbox Code Playgroud)
也如预期的那样,我得到一个重定向到/
<p>Moved Temporarily. Redirecting to <a href="http://127.0.0.1:3000/">http://127.0.0.1:3000/</a></p>
Run Code Online (Sandbox Code Playgroud)
C.检查/帐户,登录
curl -v localhost:3000/account
Run Code Online (Sandbox Code Playgroud)
我勒个去???
<p>Moved Temporarily. Redirecting to <a href="http://localhost:9292/login">http://localhost:3000/login</a></p>
Run Code Online (Sandbox Code Playgroud) 我在多线程服务器(每个线程的连接)中的cookie生成/验证回调有一些麻烦。据我所知,DTLS东西需要这些回调。我担心的是示例代码对cookie使用了全局变量,如果有很多传入的连接,那么我宁愿使用cookie和连接的哈希。
我有两个问题:
关于(2),回调(见下文)发生的线程与连接不同,因此我不能将线程ID用作哈希键。回调具有SSL *参数,我敢打赌有某种方法可以从中获取唯一的会话/连接ID,但我不知道如何获取它。我看了看文档,但没有看到任何使用SSL *对象并提供唯一编号的东西,至少从我所知道的方法名称来看。给定这些回调传递的参数后,用连接标识唯一cookie的最佳方法是什么?
我正在根据Robin Seggelmann的示例编写代码。我的东西在这里。
2个全局变量:
unsigned char cookie_secret[COOKIE_SECRET_LENGTH];
int cookie_initialized=0;
Run Code Online (Sandbox Code Playgroud)
2个回调使用以下变量:
int generate_cookie(SSL *ssl, unsigned char *cookie, unsigned int *cookie_len) {
...
/* Initialize a random secret */
if (!cookie_initialized) {
if (!RAND_bytes(cookie_secret, COOKIE_SECRET_LENGTH))
...
Run Code Online (Sandbox Code Playgroud)
和
int verify_cookie(SSL *ssl, unsigned char *cookie, unsigned int cookie_len) {
...
/* If secret isn't initialized yet, the cookie can't be valid */
if (!cookie_initialized) return 0;
Run Code Online (Sandbox Code Playgroud)
主服务器循环设置这些回调,并为每个客户端连接打开一个新线程:
void start_server(int port, char …Run Code Online (Sandbox Code Playgroud) ios ×3
c ×2
api ×1
asyncsocket ×1
callback ×1
cocoa ×1
deployment ×1
gcc ×1
heartbeat ×1
iphone ×1
java ×1
jboss ×1
kubernetes ×1
linux ×1
macos ×1
netty ×1
node.js ×1
objective-c ×1
opensearch ×1
openssl ×1
passport.js ×1
tcp ×1
uitextfield ×1
uitextview ×1
wikimedia ×1
wikipedia ×1