【问题标题】:Node.js socket.io not responding to iOS socket.io emit requestsNode.js socket.io 没有响应 iOS socket.io 发出请求
【发布时间】:2016-01-12 03:10:07
【问题描述】:

我似乎无法弄清楚这一点。我正在测试使用 socket.io 将 iOS 客户端应用程序与 Node.js 服务器连接起来。我的服务器代码如下所示:

var io = SocketIO(8099, { log: true });

io.on('connection', function (socket) {

    socket.on('connect', function (data) {
            console.log('Connected, data: ' + data);
        });

    socket.on('getProjects', function(from, msg) {
        database.allProjects(function getAllProjectsCallback(err, rows) {
            console.log('Got the project list');
            socket.emit('projectList', rows);
        });
    });

});

我的 iOS 代码以:

开头
_socket = [[SocketIOClient alloc] initWithSocketURL:@"http://localhost:8099" opts:nil];

    [_socket on:@"connect" callback:^(NSArray* data, SocketAckEmitter* ack) {
        NSLog(@"socket connected");
    }];

    [_socket on:@"projectList" callback:^(NSArray* data, SocketAckEmitter* ack) {
        NSLog(@"Project list received");
        [ack with:@[]];
    }];

    [_socket connect];

在另一种方法中,我有这个代码应该发送获取项目请求:

[_socket emit:@"getProjects" withItems:@[]];

我可以在日志中看到 iOS“套接字已连接”消息。但不是 Node.js“已连接,...”消息。当我在 iOS 中触发 [_socket emit:@"getProjects" ...] 时,服务器上没有任何反应。 'connect' 或 'getProjects' 事件都不会被调用。

我浏览过互联网,据我所知,我已经按照我能找到的所有博客和示例做了所有事情。

我在此设置中缺少什么?还是我从根本上错过了什么?

【问题讨论】:

    标签: ios node.js socket.io


    【解决方案1】:

    我对 iOS 代码一无所知。但是我在您的服务器代码中看到了一些错误。

     socket.on('connect', function (data) {
            console.log('Connected, data: ' + data);
     });
    

    以上代码的意思是当有人向套接字名称“连接”发送数据时,它将控制台记录该数据。

    我认为你的代码应该是这样的。

    var io = SocketIO(8099, { log: true });
    
    io.on('connection', function(socket) {
        console.log('New Connection');
        socket.on('getProjects', function(data) {
            database.allProjects(function getAllProjectsCallback(err,  rows) {
                console.log('Got the project list');
                socket.emit('projectList', rows);
            });
        });
    });
    

    【讨论】:

    • 我的理解是在建立连接时执行'connect',在用户断开连接时调用'disconnect'。除了这两个和其他一些预定义的消息,我可以使用socket.on(...) 来定义我喜欢的任何消息。我看到的问题是“连接”在 iOS 客户端上执行,但在服务器上没有执行任何操作。 iOS 客户端发出“getProjects”消息,服务器上没有任何反应。任何地方都没有错误。
    【解决方案2】:

    刚刚意识到这都是我的错。我的时间错了,因为我正在重构与不同通信模型一起工作的代码。我的代码在创建套接字之后但在它准备好发送数据之前设法执行发射。

    现在一切正常。谢谢。

    【讨论】:

    • 但是你是怎么知道的,那个socket已经准备好发射了。我面临同样的问题,仍然卡住了!
    • 在您获得连接事件之前,套接字实际上处于脱机状态。我的问题是我在执行“连接”之后和“连接”有机会执行之前直接运行“发射”。我需要将我的 'emit' 转换为 'on('connect'...)' 方法,这样只有在建立连接后我才执行我的 emit。
    • 好的,那么我想我还有其他问题。谢谢你的帮助!我只在 on('connect ') 响应之后才调用发出。
    猜你喜欢
    • 2014-09-03
    • 1970-01-01
    • 2019-12-18
    • 2013-02-13
    • 1970-01-01
    • 2017-11-30
    • 2014-11-21
    • 2014-11-07
    • 1970-01-01
    相关资源
    最近更新 更多