我似乎无法想出这个。我正在测试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];
在另一种方法中我有这个代码应该发送get projects请求:
[_socket emit:@"getProjects" withItems:@[]];
我可以在日志中看到iOS“套接字连接”消息。但不是Node.js“已连接,...”消息。当我在iOS中触发[_socket emit:@"getProjects" ...]
时,服务器上没有任何反应。既没有调用'connect'或'getProjects'事件。
我已经控制了互联网,据我所知,我已经按照我能找到的所有博客和示例完成了所有工作。
我在此设置中缺少什么?或者我从根本上错过了什么?
答案 0 :(得分:0)
我对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);
});
});
});
答案 1 :(得分:0)
刚才意识到这完全是我的坏事。我有时间错误,因为我正在使用不同的通信模型的代码进行重构。我的代码设法在创建套接字之后但在它准备好发送数据之前执行emit。
现在一切正常。感谢。