0

我正在开发一个与 Web 服务器通信并需要来自服务器的推送通知的 Android 应用程序。

此应用程序成功运行并按预期使用 Tornado 2.1 作为 Web 服务器并在 Android 客户端应用程序中使用 weberknecht websockets。

但是,在 Tornado 3.1 中,当我尝试调用“websocket.connect()”方法时,同一个应用程序总是返回异常。

Tornado 3.1 客户端应用程序中的异常:-

连接失败:未知状态码 426 导致 WebSocketException (id=830032153816)

我在 stackoverflow 上读到 weberknecht 可能与最新的 Tornado 3.1 不兼容。因此,我搬到了 Autobahn web socket。但是,如果我导入高速公路 websocket jar,应用程序会在“连接”方法处崩溃。我也试过 jwebsocket 客户端。我也面临同样的问题。

我的代码中是否缺少某些内容?weberknecht 与 Tornado 3.1 不兼容吗?我有哪些使用 Tornado 3.1 的替代方案?或者我应该继续使用 Tornado 2.1 吗?

我的申请代码:-

public class MainActivity extends Activity  {

protected static final String TAG = null;
BaseTokenClient btc;
Toast testToast;
private  WebSocketConnection websocket; 
URI url;

private class AsyncThread extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {
        try {
            websocket.connect();
        } catch (de.roderick.weberknecht.WebSocketException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return "";
    }
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    url = null;
    try {
        url = new URI("ws://192.168.1.130:8888/ws");
    } catch (URISyntaxException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    try {
        websocket =  new WebSocketConnection(url);
    } catch (de.roderick.weberknecht.WebSocketException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    // Register Event Handlers
    websocket.setEventHandler(new WebSocketEventHandler() {
            public void onOpen()
            {
                    Log.e(TAG, "--open");
                    try {
                        websocket.send("HELLO");
                    } catch (de.roderick.weberknecht.WebSocketException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
            }

            public void onMessage(WebSocketMessage message)
            {
                    Log.e(TAG, "--received message: " + message.getText());
                    System.out.println(message.getText());
            }

            public void onClose()
            {
                    Log.e(TAG, "--close"); 
            }
    });

    new AsyncThread().execute();

}

}

我的 Tornado 网络服务器代码:-

import tornado.httpserver
import tornado.websocket
import tornado.ioloop
import tornado.web

class WSHandler(tornado.websocket.WebSocketHandler):
    def open(self):
        print 'new connection'
        self.write_message("Hello World")

    def on_message(self, message):
        print 'message received %s' % message

    def on_close(self):
        print 'connection closed'

application = tornado.web.Application([
    (r'/ws', WSHandler),
])

if __name__ == "__main__":
    http_server = tornado.httpserver.HTTPServer(application)
    http_server.listen(8888)
    tornado.ioloop.IOLoop.instance().start()
4

1 回答 1

0

尝试在此处进行一些调试。在此处
检查到达 Tornado 和离开 Weberknecht 的标头。

于 2013-12-12T07:00:55.567 回答