【iOS】WebsocketStompKit 使用时的几处修改【记录】

22 篇文章 0 订阅
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];
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值