0

Android 用に開発された websocket クライアント ライブラリのいくつかを試しています。現在、AutoBahn ライブラリをいじっていますが、「サンプル」クライアントをサーバーに接続できないようです。次のコードを使用しています。

          try {
         mConnection.connect(wsuri, new WebSocketHandler() {

            @Override
            public void onOpen() {
               Log.d(TAG, "Status: Connected to " + wsuri);
                mConnection.sendTextMessage("info");
            }

           @Override
            public void onTextMessage(String payload) {
               Log.d(TAG, "Got echo: " + payload);
            }

           @Override
            public void onClose(int code, String reason) {
               Log.d(TAG, "Connection lost.");
            }
         });
      } catch (WebSocketException e) {

         Log.d(TAG, e.toString());
      }

Wireshark を使用してスニッフィングすると、tcp 接続が確立されていることがわかります。HTTP Get が送信されていることがわかります。しかし、サーバーがアップグレード メッセージで応答しません。AutoBahn 接続メッセージ (HTTP GET ヘッダー内) に何らかの理由で origin フィールドが含まれていないことに気付きました。接続した別のライブラリを試してみましたが、HTTP GET に origin フィールドがありました。これは既知の問題ですか、それとも AuotBahn でサポートされていないだけですか?

4

2 に答える 2

1

それは私のために働くようです。以下に醜い未編集のコードを投稿します。私は WebMatrix で開発しているので、IIS でサーバーを実行しています。

サーバー (Node.js)

var express = require('express')
var http = require('http');
var wamp = require('wamp.io');
var io = require('websocket.io');

// Setup Express
var app = express(); 
var server = http.createServer(app);
app.listen(process.env.PORT);
app.use(express.static(__dirname + '/public'));

// Setup WAMP
var ws = io.listen(9000);
var apps = wamp.attach(ws);

apps.on('call', function(procUri, args, cb) {
  //if (procUri === 'isEven') {
    cb(null, args[0] % 2 == 0);
 // }
});

クライアント(アンドロイド)

private final WebSocketConnection mConnection = new WebSocketConnection();

private void start() {
    final String wsuri = "ws://192.168.0.111:9000/topic5"; // Hardcoded local (Need to open a port on server)
    mConnection.disconnect();

    try {
        mConnection.connect(wsuri, new WebSocketHandler() {

            @Override
            public void onOpen() {
                Log.d(TAG, "Status: Connected to " + wsuri);
                testRpc();
            }

            @Override
            public void onClose(int code, String reason) {
                Log.d(TAG, "Connection lost.");
                start(); // Ugly reconnect
            }
        });
    } catch (WebSocketException e) {
        Log.d(TAG, e.toString());
    }
}

private void testRpc() {
    mConnection.call("calc:asum", Integer.class, new Wamp.CallHandler() {

        @Override
        public void onResult(Object result) {
            mDumpTextView.setText(result.toString());
        }

        @Override
        public void onError(String errorId, String errorInfo) {
            mDumpTextView.setText("calc:asum RPC error - " + errorInfo);
        }
    }, 3);
}
于 2013-10-01T23:56:12.110 に答える