【问题标题】:JavaScriptCore + Socket.IOJavaScriptCore + Socket.IO
【发布时间】:2023-04-11 11:34:01
【问题描述】:

我正在尝试使用 iOS 应用程序连接到 Node.JS 服务器,但我没有使用第 3 方本机库,而是尝试将其与 JavaScript Socket.IO 客户端连接并传递数据我正在接收我的本机代码。我正在将 Socket.IO 模块加载到 JSContext 中并且加载良好,我可以看到 io 对象内的所有可用对象/函数。

但是当它到达连接到我的 Node.JS 服务器的线路时,我的 JavaScript 代码的执行停止了,我无法找出原因。

如果我暂停应用程序,我看不到任何其他用于打开连接的线程。 JavaScriptCore 是否可能不支持 Web 套接字?

我的 Objective-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];

我的 JavaScript 代码:

var socket = io.connect(socket_url);

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

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

【问题讨论】:

    标签: javascript objective-c ios7 socket.io javascriptcore


    【解决方案1】:

    JavaScriptCore 本身只实现了ECMAScript spec。 XMLHTTPRequest、Web 套接字、DOM 等东西都来自 WebKit。如果你绝对想运行 Socket.IO JavaScript 客户端,你或许可以使用隐藏的 UIWebView,尽管我建议使用 Socket.IO-objc

    在不相关的注释中,您可以通过检查其异常属性或设置一个将错误打印到 exceptionHandler 属性的块来查看 JSContext 生成的错误:

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

    【讨论】:

      猜你喜欢
      • 2018-04-07
      • 2018-01-15
      • 2010-10-28
      • 1970-01-01
      • 2011-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多