似たようなスレッドがいくつかあるのを見ましたが、答えが見つかりませんでした。
私が作っているのは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 Server と weberknecht を使用しています。サーバーは次のようになります。
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();
}
私は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などを使用するのが最適な場合があります。
よろしく、ミシェル・スミス
Raynosが言ったように、WebSocketの仕様はまだドラフト(変更)です。たぶん、Guillermo Rauch(作成者socket.io)に、彼が使用しているドラフトを尋ねて、適切なWebsocketライブラリを見つけることができます。 彼のgithubページ で、彼のメールアドレスを見つけて、彼にメールを送信してみてください(短い)。
別のトランスポート(ロングポーリング)を使用して、 spec を自分で実装することもできます。
しかし、私の意見では、リアルタイムで電話に更新をプッシュする代わりに、Googleの c2dm (大企業はすでにこれを使用しており、電話のバッテリーに非常に優しくなります)を使用する必要があります。たとえば whatsapp (awesome)のようにc2dmを使用している多くのアプリケーションがすでにインストールされています。 notifo's api を使用して作業を簡素化することができます。次に、インストールするだけです Androidプログラム が必要な通知を受信します。 ノードモジュール(npm) を使用することもできます(簡単:))
私はお勧め