Node.js socket.io 未响应 iOS socket.io 发出请求
Node.js socket.io not responding to iOS socket.io emit requests
我似乎想不通。我正在测试使用 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 "socket connected" 消息。但不是 Node.js "Connected, ..." 消息。当我触发 iOS 中的 [_socket emit:@"getProjects" ...]
时,服务器上没有任何反应。 'connect' 或 'getProjects' 事件均未被调用。
我上网查了一下,据我所知,我已经按照我能找到的所有博客和示例做了所有的事情。
我在此设置中缺少什么?还是我从根本上误解了什么?
我不了解 iOS 代码。但是我在你的服务器代码中看到了一些错误。
socket.on('connect', function (data) {
console.log('Connected, data: ' + data);
});
以上代码表示当有人向套接字名称"connect"发送数据时,它会console.log那个数据。
我认为这就是您的代码的样子。
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);
});
});
});
才意识到这都是我的错。我的时机不对,因为我正在重构使用不同通信模型的代码。我的代码设法在创建套接字之后但在准备发送数据之前执行发出。
现在一切正常。谢谢。
我似乎想不通。我正在测试使用 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 "socket connected" 消息。但不是 Node.js "Connected, ..." 消息。当我触发 iOS 中的 [_socket emit:@"getProjects" ...]
时,服务器上没有任何反应。 'connect' 或 'getProjects' 事件均未被调用。
我上网查了一下,据我所知,我已经按照我能找到的所有博客和示例做了所有的事情。
我在此设置中缺少什么?还是我从根本上误解了什么?
我不了解 iOS 代码。但是我在你的服务器代码中看到了一些错误。
socket.on('connect', function (data) {
console.log('Connected, data: ' + data);
});
以上代码表示当有人向套接字名称"connect"发送数据时,它会console.log那个数据。
我认为这就是您的代码的样子。
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);
});
});
});
才意识到这都是我的错。我的时机不对,因为我正在重构使用不同通信模型的代码。我的代码设法在创建套接字之后但在准备发送数据之前执行发出。
现在一切正常。谢谢。