面试题答案
一键面试- 引入框架:
- 在项目中引入
SocketRocket
等WebSocket框架(SocketRocket
是一个流行的Objective - C WebSocket库)。如果使用CocoaPods,在Podfile
中添加pod 'SocketRocket'
,然后执行pod install
。
- 在项目中引入
- 初始化WebSocket对象:
SRWebSocket *webSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"ws://your - server - url"]]]; webSocket.delegate = self;
- 这里创建了一个
SRWebSocket
对象,并指定了要连接的WebSocket服务器的URL,同时设置当前类为WebSocket的代理,以便接收相关事件回调。
- 这里创建了一个
- 建立连接:
[webSocket open];
- 调用
open
方法来发起WebSocket连接请求。
- 调用
- 实现代理方法接收消息:
- 实现
SRWebSocketDelegate
协议中的代理方法。 - 接收消息的代理方法:
- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message { if ([message isKindOfClass:[NSString class]]) { NSString *textMessage = (NSString *)message; NSLog(@"Received text message: %@", textMessage); } else if ([message isKindOfClass:[NSData class]]) { NSData *dataMessage = (NSData *)message; NSLog(@"Received data message of length: %zu", dataMessage.length); } }
- 实现
- 发送消息:
- 发送文本消息:
NSString *textToSend = @"Hello, WebSocket!"; [webSocket send:textToSend];
- 发送二进制数据消息:
NSData *dataToSend = [@"Some binary data" dataUsingEncoding:NSUTF8StringEncoding]; [webSocket send:dataToSend];
- 处理连接相关事件:
- 连接成功回调:
- (void)webSocketDidOpen:(SRWebSocket *)webSocket { NSLog(@"WebSocket connection opened"); }
- 连接失败回调:
- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error { NSLog(@"WebSocket connection failed with error: %@", error); }
- 连接关闭回调:
- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean { NSLog(@"WebSocket connection closed with code: %ld, reason: %@, wasClean: %d", (long)code, reason, wasClean); }