上一篇我們瞭解下有關網絡通信的一些基礎知識,這篇我們就具體實踐下。
實踐之前我們先搭建一下本次demo的環境。
1.首先去node js 官網安裝node js環境
安裝完成如下:
安裝完成 打開終端 輸入 : node -v
log輸出:v0.10.13.
這就證明你的node環境好了。
2..在socket io 官網下載下載socket io的例子,直接copy保存爲js文件就好,取名爲app.js。
3. 把你新建的app.js copy到 剛纔node js 安裝的目錄下
/usr/local/lib目錄下,注意這個目錄是系統隱藏的目錄
4.打開終端cd 到這個目錄下 輸入:node app.js
看看會不會報錯。正常情況下是
輸出: info - socket. io started
如果報錯那就可能還缺少2個插件,express 和 ejs
分別輸入 :sudo npm install express
sudo npm install ejs
然後再次運行node app.js
就看見輸出: info - socket. io started
下面這邊websocket的環境已經ok了。
然後就看ios這邊的了。 在github 下載我的demo app 然後直接運行就好了,可以看見下面的效果了。
具體代碼重點是初始化一個socketio的對象,然後實現他的delegate:
- socketIO = [[SocketIO alloc] initWithDelegate:self];
- //socketIO.useSecure = YES;
- [socketIO connectToHost:@"localhost" onPort:8127];
- -(void)sendMessageToWebSocket:(NSString *)str
- {
- SocketIOCallback cb = ^(id argsData) {
- NSDictionary *response = argsData;
- // do something with response
- NSLog(@"ack arrived: %@", response);
- };
- [socketIO sendMessage:str withAcknowledge:cb];
- }
客戶端接受到消息
- - (void) socketIO:(SocketIO *)socket didReceiveEvent:(SocketIOPacket *)packet
- {
- NSLog(@"didReceiveEvent()");
- NSString *receiveData=packet.data;
- NSData *utf8Data = [receiveData dataUsingEncoding:NSUTF8StringEncoding];
- NSDictionary *dictemp=(NSDictionary *)[SocketIOJSONSerialization objectFromJSONData:utf8Data error:nil];
- NSDictionary *aadic=(NSDictionary *)[[dictemp objectForKey:@"args"] objectAtIndex:0];
- NSString * temp = [aadic objectForKey:@"text"];
- NSLog(@"temp==%@",temp);
- if (![temp isEqualToString:@"connectok"]) {
- [self.messages addObject:temp];
- if((self.messages.count - 1) % 2)
- [MessageSoundEffect playMessageSentSound];
- else
- [MessageSoundEffect playMessageReceivedSound];
- [self finishSend];
- }
- }