2014-05-10 4 views
2

iOS 응용 프로그램이있는 Node.JS 서버에 연결하려고하지만 타사 네이티브 라이브러리를 사용하는 대신 JavaScript Socket.IO 클라이언트와 연결하려고합니다 & 내가받은 데이터를 내 기본 코드로 전달할 수 있습니다. Socket.IO 모듈을 JSContext &으로로드하고 있습니다.로드가 잘되고, io 객체 안에있는 모든 사용 가능한 객체/함수를 볼 수 있습니다.JavaScriptCore + Socket.IO

하지만 내 Node.JS 서버에 연결하기위한 줄에 도달하면 JavaScript 코드 실행이 중지됩니다 & 이유를 찾을 수 없습니다.

앱을 일시 중지하면 연결을 여는 데 추가 스레드가 표시되지 않습니다. JavaScriptCore가 웹 소켓을 지원하지 않을 수 있습니까?

내 목표 - C 코드 :

JSContext *context = [JSContext new]; 

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"socket.io" ofType:@"js"]; 
NSString *socketIO = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error];; 


filePath = [[NSBundle mainBundle] pathForResource:@"client" ofType:@"js"]; 
NSString *client = [NSString stringWithContentsOfFile:filePath encoding:NSUTF8StringEncoding error:&error]; 
context[@"socket_url"] = @"http://192.168.1.128:8080"; 
context[@"log"] = ^(NSString *string){ 

    NSLog(@"JavaScript:\n\t%@", string); 
}; 
context[@"iOSBlock"] = ^(id deviceState) { 

    id JSON = [NSJSONSerialization JSONObjectWithData:deviceState options:NSJSONReadingMutableLeaves error:nil]; 
    // I'll do something here if I get reach this part :) 
}; 

[context evaluateScript:socketIO]; 
[context evaluateScript:client]; 

내 자바 스크립트 코드 :

var socket = io.connect(socket_url); 

socket.on('connect', function(){ 
     log("Connected!"); 
}); 

socket.on('device-change', iOSBlock(deviceState)); 

답변

5

JavaScriptCore는 자체 만 ECMAScript spec을 구현합니다. XMLHTTPRequest, 웹 소켓, DOM 등과 같은 것들은 WebKit에서 가져옵니다. Socket.IO-objc을 사용하는 것이 좋지만 Socket.IO JavaScript 클라이언트를 절대적으로 실행하려면 숨겨진 UIWebView를 사용할 수 있습니다.

context.exceptionHandler = ^(JSContext *context, JSValue *exception) { 
    NSLog(@"[%@:%@:%@] %@\n%@", exception[@"sourceURL"], exception[@"line"], exception[@"column"], exception, [exception[@"stack"] toObject]); 
}; 
:

관련이없는 노트에

, 당신은, 또는 exceptionHandler 속성에 오류를 인쇄하는 블록을 설정하여 JSContext 중 하나가 예외 속성을 검사하여 생성 어떤 오류를 볼 수 있습니다

관련 문제