Я хочу реализовать SocketIO в моем проекте.Реализация SocketIO в ios
Ниже приведены серверные и клиентские коды для моего проекта.
На стороне клиента есть тестовая кнопка, которая отправляет запрос на отправку ([self.afn post:@"/test" withParams:@{} completion:^(id obj{})]
) на сервер. self.afn - мой экземпляр объекта моего класса-оболочки для AFNetworking library.
на стороне сервера перехватывает этот запрос поста с функцией app.post('test', function(){...}
В этом обработчике сообщения запроса, я испускаю данные ({hello: "world"}
) на news
канале, и я ожидать, чтобы поймать эти данные на стороне клиента в didReceiveMessage
обработчике SocketIO library for Objective C.
Я проверил, что кнопка успешно отправляет запрос на отправку, и серверная сторона успешно обрабатывает этот пост-запрос и испускает данные (hello:"world"
) на канале news
. Однако клиентская сторона не использует эти данные для обработчика didReceiveMessage
.
Где проблема? Есть ли у вас какие-либо идеи?
Подробности кодов для сервера и на стороне клиента, приведены ниже:
ServerSide:
//server.js
var express = require('express');
var app = module.exports = express();
/* configure app ... */
var io = require('socket.io').listen(8090);
var mySocket;
io.sockets.on('connection', function (socket) {
mySocket = socket;
});
app.post("/test", function(req, res){
if(mySocket){
mySocket.emit('news', { hello: "world"});
}
});
стороне клиента:
//Client side in ObjectiveC
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
self.txtFrom.delegate = self;
self.txtTo.delegate = self;
//initialize socket
self.socket = [[SocketIO alloc] initWithDelegate:self];
[self.socket connectToHost: @"172.20.10.5" onPort:8090];
}
// IBAction for the test button to send a post request to the server to activate
- (IBAction)actTest:(id)sender {
//self.afn is my wrapper class for AFNetworking
[self.afn post:@"/test" withParams:@{@"foo": @"bar"} completion:^(id responseObj){
NSLog(@"Response object: %@", responseObj);
}];
}
- (void) socketIO:(SocketIO *)socket didReceiveMessage:(SocketIOPacket *)packet
{
NSLog(@"didReceiveMessage() >>> data: %@", packet.data);
}
@end
РЕДАКТИРОВАТЬ:
Я следовал предложению Мати и «OtaK» Amiot и изменил [self.socket connectToHost: @"172.20.10.5" onPort:8090 withParams:nil withNamespace:@"news"];
к [self.socket connectToHost: @"172.20.10.5" onPort:8090];
Теперь я могу увидеть сообщение на консоли, однако, когда сообщение получено на стороне клиента, didReceiveMessage
обработчик не вызывается.
Когда я отправляю сообщение от отправителя, имя события - «новости», но на стороне клиента я не упоминал имя события. Может ли это быть причиной?
я есть нет большого опыта работы с 'C#', но попробуйте рассмотреть node.js как серверную, я считаю, что это сэкономит вам много времени. – Gntem
Это nodejs, уже. – ankakusu