1、+ STOMPFrameFromData: 方法
收到的内容会被转为一些特殊符号,像乱码一样。
for (int i=0; i < [line length]; i++) {
unichar c = [line characterAtIndex:i];
if (c != '\x00') {
[body appendString:[NSString stringWithFormat:@"%c", c]];
}
}
...
...
return [[STOMPFrame alloc] initWithCommand:command headers:headers body:body];
删除这部分代码,改为:
[body appendString:line];
...
...
return [[STOMPFrame alloc] initWithCommand:command headers:headers body:[body stringByTrimmingCharactersInSet:[NSCharacterSet controlCharacterSet]]];
2、-sendTo:headers:body:
下面这行代码会导致发送消息报错 Frame must be terminated with a null octet,删除即可
msgHeaders[kHeaderContentLength] = [NSNumber numberWithLong:[body length]];
3、心跳
默认值是:
self.clientHeartBeat = @"5000,10000";
可修改为服务端对应的值,和服务端保持一致。其实接口有预留修改的地方。
- (void)connectWithHeaders:(NSDictionary *)headers
completionHandler:(void (^)(STOMPFrame *connectedFrame, NSError *error))completionHandler;
headers 的值可以设置 kHeaderHeartBeat 字段的值,就是心跳值。
NSDictionary *headers = @{
kHeaderHeartBeat: @"10000,10000"
};
[self.socket connectWithHeaders:headers completionHandler:^(STOMPFrame *connectedFrame, NSError *error) {
}];
初始化方法里也有个header字段,是设置请求头的,比如token;两个header是不一样的,不要弄混。
self.socket = [[STOMPClient alloc] initWithURL:url webSocketHeaders:headers useHeartbeat:YES];
4、webSocket:didReceiveMessage:
收到的字符串如果是 @"\n",会崩溃:
STOMPFrame *frame = [STOMPFrame STOMPFrameFromData:[string dataUsingEncoding:NSUTF8StringEncoding]];
[self receivedFrame:frame];
添加 if 判断:
if (![string isEqualToString:@"\n"]) {
STOMPFrame *frame = [STOMPFrame STOMPFrameFromData:[string dataUsingEncoding:NSUTF8StringEncoding]];
[self receivedFrame:frame];
}