Получение socket.io для работы с разрывом телефона

Я наткнулся на множество сообщений здесь и на других сайтах о том, как заставить socket.io работать в приложении телефонной связи Android, к сожалению, у меня все еще есть проблемы. Если у вас есть опыт настройки такого рода вещей, любые советы, которые вы могли бы дать, были бы очень признательны, поскольку я потратил несколько дней на то, чтобы вырвать мне волосы: P

Итак, для начала у меня есть очень простая настройка сервера socket.io, который работает на моей локальной машине:

var server = require('http').createServer();
var io = require('socket.io')(server);

io.sockets.on('connection', function (socket) {
    console.log('socket connected');

    socket.on('disconnect', function () {
        console.log('socket disconnected');
    });

    socket.emit('text', 'wow. such event. very real time.');
});

server.listen(3000);

который я получил из одного из учебников, которые я нашел, и, похоже, он работает нормально.

Теперь в моем приложении телефонной связи весь код, который у меня есть, выглядит следующим образом:

var app = angular.module("MyApp", [
    "MyCtrl"
]);

app.controller("AppCtrl", ["$scope", function ($scope) {
    console.log("About to attempt a connection (" + socket + ")!");
    var socket = io("10.0.5.159:3000");
    socket.on("connect", function(data) {
        console.log("Connected: " + data);
    });
    socket.on("error", function(err) {
        console.log("Error: " + err);
    });
}]);

Простое приложение angular.js с одним контроллером, который пытается подключиться к серверу (предоставленный IP-адрес является правильным в моей локальной сети). Мой журнал попадает в ловушку, поэтому я знаю, что этот код выполняется, но я никогда не получаю событие подключения или событие ошибки, и в консоли не появляется никаких ошибок, просто кажется, что он молча терпит неудачу. Я также не получаю событие подключения на сервере.

Согласно другому сообщению stackoverflow, я убедился, что мой config.xml содержит соответствующие

<access origin="10.0.5.159*" />

вход. Но я все еще, кажется, ничего не получаю с ним. Та же строка кода

var socket = io("10.0.5.159:3000");

при выполнении в окне браузера Safari работает точно так, как ожидалось, и мой сервер регистрирует событие подключения, поэтому я уверен, что сервер и код подключения действительны.

Любые идеи, что я могу делать неправильно?


person George Green    schedule 18.01.2015    source источник
comment
Вы пытались установить заголовок ответа (Access-Control-Allow-Origin: *) с сервера node.js на клиент?   -  person frank    schedule 18.01.2015
comment
Я только что попытался установить это, к сожалению, место, которое вы установили с помощью socket.io, находится в обработчике событий соединения, и я никогда не получаю событие соединения.   -  person George Green    schedule 19.01.2015
comment
Если кто-то еще сталкивался с этим, проблема заключалась в том, что мне нужно было использовать ответ из stackoverflow.com/questions/15023185/ в моем config.xml и добавьте к моему IP-адресу префикс http://!   -  person George Green    schedule 20.01.2015


Ответы (1)


Ваш код не работает, потому что на стороне сервера у вас есть "текстовое" событие, поэтому на стороне клиента вы должны написать socket.on("text")

На стороне сервера вы не генерируете события «подключение» и «ошибка», тогда как вы должны получать эти события на стороне клиента. И я не думаю, что обычный socket.js работает с Angular js, вам нужно добавить библиотеку Angular.js socket.io.

person Nishank Singla    schedule 22.12.2015