Подтвердить что ты не робот

Android для связи node.js

Я видел, что есть несколько подобных потоков, но я не мог найти свой ответ.

Я делаю и приложение для Android, я хочу использовать node в качестве сервера для обмена в реальном времени.

Я действительно не могу заставить это работать.

Возможно, я делаю много ошибок, но мне нравится пытаться понять.

Мой сервер так же прост, как

var http = require('http'),  
io = require('socket.io'),
server = http.createServer(function(req, res){ 
     res.writeHead(200, {'Content-Type': 'text/html'}); 
     res.end(':)'); 
});
server.listen(8080);
var socket = io.listen(server); 
socket.on('connection', function(client){
    client.send("hello");
    console.log("connected!");
});

и это работает... Я пробовал это с помощью веб-приложения, и я могу подключиться.

Но я не могу с java..

Я попробовал kryonet, но получаю исключение, подобное "подключенному, но таймауту при регистрации"

Я попробовал weberknecht Я получаю ошибку при создании сокета для ws://184.xxxxxx: 8080"

Я попробовал TooTallNate, не повезло, он просто вызывает метод onClose.

Я попробовал jWebSocket, но я не мог заставить его работать...

Итак, я здесь, прося о помощи, кто-нибудь знает, как это сделать? любое предложение?

P.S. для TooTallNate Я использую что-то вроде этого:

Net net = new Net(new URI("ws://184.xxxxxx:8080"),WebSocketDraft.DRAFT76);

может быть проблема здесь?

UPDATE: Я справился с этим! после хорошего сна у меня возникла идея, я использовал socket.io, плохую идею... теперь я использую Node Websocket Server с weberknecht. Сервер выглядит так:

var ws = require("websocket-server");

var server = ws.createServer();

server.addListener("connection", function(client){
    console.log("new connection");
    client.send("aaaaaa");
    client.addListener("message", function(msg){
    });
});

server.listen(8080);

и клиент:

try {
    URI url = new URI("ws://184.106.69.64:8080/");
    WebSocket websocket = new WebSocketConnection(url);
    websocket.setEventHandler(new WebSocketEventHandler() {
        public void onOpen(){
            System.out.println("--open");
        }    
        public void onMessage(WebSocketMessage message){
            System.out.println("--received message: " + message.getText());
        }   
        public void onClose(){
            System.out.println("--close");
        }
    });

    websocket.connect();
    websocket.send("hello world");
}
catch (WebSocketException wse) {
    wse.printStackTrace();
}
catch (URISyntaxException use) {
    use.printStackTrace();
}
4b9b3361

Ответ 1

Я автор node -websocket-server (nws), и я уверен, что причина для node -websocket-server working и socket.io not, связана с реализацией каждого, NWS будет автоматически обсуждать правильный проект для использования, и он также надеется на 90-100% соответствия проектам 76 и 75.

Что касается socket.io, я не могу слишком много комментировать, но последний раз, когда я смотрел, эта реализация websocket была довольно плохо реализована.

В настоящее время я работаю над проектом в названии node -websocket-protocol, который будет использоваться socket.io, faye и т.д., чтобы предоставить им действительно надежную и совместимую реализацию websocket, Это также заменит текущую реализацию в node -websocket-server в версии 2.0.0.

В качестве побочного примечания, если вы предпочитаете не размещать собственный сервер веб-сайтов, вы можете посмотреть на использование Pusher.com, которые на самом деле являются моими работодателями.

[Обновление] Что касается того, являются ли websockets наиболее подходящим выбором технологии для вашего приложения, это вопрос того, какой тип данных и взаимодействие с вашим приложением. На мобильном устройстве лучше всего использовать что-то вроде urbanairhip или notifio, если вы просто отправляете push-уведомления.

С уважением, Мишель Смит

Ответ 2

Как и Рейнос, спецификация websocket все еще представляет собой черновик (изменения). Возможно, вы могли бы спросить Гильермо Рауха (Author socket.io), какой проект он использует, и найти соответствующую библиотеку Websocket. На странице его страница github вы можете найти его адрес электронной почты и попытаться отправить ему электронное письмо (короткое).

Вы также можете попробовать использовать другой транспорт (длинный опрос) и реализовать spec, я думаю.

Но, на мой взгляд, вы должны использовать Google c2dm (большие игроки уже используют это и будут очень аккуратно подключаться к вашему аккумулятору телефона ) вместо этого, чтобы обновлять телефон в реальном времени. У меня уже установлено много приложений, которые используют c2dm, например, whatsapp (удивительный). Вы можете использовать notifo api, чтобы упростить вашу работу. Затем просто установите программу android для получения желаемых уведомлений. Существует также node модуль (npm), который можно использовать (просто:))