无法将AutoBahn Websocket连接到Connect

时间:2013-08-28 20:13:47

标签: android autobahn

我正在尝试为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 out out。但是,我的服务器没有响应升级消息。我注意到AutoBahn连接消息(在HTTP GET头中)由于某种原因不包含origin字段。我尝试了一个连接的不同库,它在HTTP GET中有源字段。这是一个已知问题,还是AuotBahn根本不支持?

2 个答案:

答案 0 :(得分:1)

Web浏览器会填充origin字段并禁止任何JavaScript操纵origin。对于非浏览器WebSocket客户端,客户端可以根据需要设置origin。因此,WebSocket服务器无法信任origin

WebSocket规范不要求origin出现,AutobahnAndroid目前不支持此设置。

答案 1 :(得分: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);
}