Связь Android с node.js - PullRequest
       30

Связь Android с node.js

24 голосов
/ 28 июня 2011

Я видел пару похожих тем, но не смог найти ответ.

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

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

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

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

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 , но не мог его получитьна работу ...

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

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

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

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

ОБНОВЛЕНИЕ: Я справился с этим!после хорошего сна у меня возникла идея, я использовал 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();
}

Ответы [ 3 ]

10 голосов
/ 29 июня 2011

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

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

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

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

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

С уважением, Майкл Смит

2 голосов
/ 28 июня 2011

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

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

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

0 голосов
/ 01 июля 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...