web-dev-qa-db-ja.com

Android tonode.js通信

似たようなスレッドがいくつかあるのを見ましたが、答えが見つかりませんでした。

私が作っているのは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!");
});

そしてこれは動作します...私はこれをWebアプリで試し、接続できます。

しかし、私は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);

問題はここにあるのでしょうか?

更新:私はこれを処理しました!よく眠った後、私はsocket.ioを使用していましたが、悪い考えでした...今は Node Websocket Serverweberknecht を使用しています。サーバーは次のようになります。

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();
}
25
Duiker101

私はnode-websocket-server(nws)の作成者であり、node-websocket-serverが機能し、socket.ioが機能しない理由は、それぞれの実装によるものだと確信しています。 NWSは、使用する適切なドラフトを自動ネゴシエートします。また、76および75のドラフトに90〜100%準拠していることを願っています。

Socket.ioについては、あまりコメントすることはできませんが、最後に見たところ、websocketの実装はかなり不十分でした。

私は現在、node-websocket-protocolというプロジェクトに取り組んでいます。これは、socket.io、fayeなどで使用して、信頼性が高く、準拠したWebSocket実装を提供できるようになります。これにより、バージョン2.0.0のnode-websocket-serverの現在の実装も置き換えられます。

ちなみに、独自のWebSocketサーバーをホストしたくない場合は、実際には私の雇用主であるPusher.comの使用を検討できます。

[更新] WebSocketがアプリケーションに最も適切なテクノロジーの選択であるかどうかについては、アプリケーションに必要なデータの種類と相互作用の問題です。モバイルデバイスでは、プッシュ通知を送信するだけの場合は、urbanairshipやnotifioなどを使用するのが最適な場合があります。

よろしく、ミシェル・スミス

10
user721340

Raynosが言ったように、WebSocketの仕様はまだドラフト(変更)です。たぶん、Guillermo Rauch(作成者socket.io)に、彼が使用しているドラフトを尋ねて、適切なWebsocketライブラリを見つけることができます。 彼のgithubページ で、彼のメールアドレスを見つけて、彼にメールを送信してみてください(短い)。

別のトランスポート(ロングポーリング)を使用して、 spec を自分で実装することもできます。

しかし、私の意見では、リアルタイムで電話に更新をプッシュする代わりに、Googleの c2dm (大企業はすでにこれを使用しており、電話のバッテリーに非常に優しくなります)を使用する必要があります。たとえば whatsapp (awesome)のようにc2dmを使用している多くのアプリケーションがすでにインストールされています。 notifo's api を使用して作業を簡素化することができます。次に、インストールするだけです Androidプログラム が必要な通知を受信します。 ノードモジュール(npm) を使用することもできます(簡単:))

2
Alfred

私はお勧め

0
xpepermint