iOS Client 與WebSocket 通信(二)

上一篇我們瞭解下有關網絡通信的一些基礎知識,這篇我們就具體實踐下。

     實踐之前我們先搭建一下本次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:

[html] view plaincopy
  1. socketIO = [[SocketIO alloc] initWithDelegate:self];  
  2. //socketIO.useSecure = YES;  
  3. [socketIO connectToHost:@"localhost" onPort:8127];    
 然後在發送就條用這個方法:

[html] view plaincopy
  1. -(void)sendMessageToWebSocket:(NSString *)str  
  2. {  
  3.     SocketIOCallback cb = ^(id argsData) {  
  4.         NSDictionary *response = argsData;  
  5.         // do something with response  
  6.         NSLog(@"ack arrived: %@", response);  
  7.     };  
  8.     [socketIO sendMessage:str withAcknowledge:cb];  
  9. }  


客戶端接受到消息

[html] view plaincopy
  1. - (void) socketIO:(SocketIO *)socket didReceiveEvent:(SocketIOPacket *)packet  
  2. {  
  3.     NSLog(@"didReceiveEvent()");  
  4.     NSString *receiveData=packet.data;  
  5.     NSData *utf8Data = [receiveData dataUsingEncoding:NSUTF8StringEncoding];  
  6.     NSDictionary *dictemp=(NSDictionary *)[SocketIOJSONSerialization objectFromJSONData:utf8Data error:nil];  
  7.     NSDictionary *aadic=(NSDictionary *)[[dictemp objectForKey:@"args"] objectAtIndex:0];  
  8.     NSString * temp = [aadic objectForKey:@"text"];  
  9.       
  10.     NSLog(@"temp==%@",temp);  
  11.     if (![temp isEqualToString:@"connectok"]) {  
  12.         [self.messages addObject:temp];  
  13.           
  14.         if((self.messages.count - 1) % 2)  
  15.             [MessageSoundEffect playMessageSentSound];  
  16.         else  
  17.             [MessageSoundEffect playMessageReceivedSound];  
  18.           
  19.         [self finishSend];  
  20.     }  
  21.       
  22. }  
發佈了40 篇原創文章 · 獲贊 4 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章