Web サーバーと通信し、サーバーからのプッシュ通知を必要とする Android アプリを開発しています。
このアプリは、Web サーバーとして Tornado 2.1 を使用し、Android クライアント アプリで weberknecht Websockets を使用して、期待どおりに正常に実行されます。
ただし、Tornado 3.1 では、「websocket.connect()」メソッドを呼び出そうとすると、同じアプリが常に例外を返します。
Tornado 3.1 を使用したクライアント アプリの例外:-
接続に失敗しました: 不明なステータス コード 426 原因 WebSocketException (id=830032153816)
weberknecht が最新の Tornado 3.1 と互換性がない可能性があることを stackoverflow で読みました。したがって、私は Autobahn Web ソケットに移行しました。しかし、autobahn 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 Webサーバーコード:-
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()