Android到node.js的通信

我看到有几个类似的线程,但我找不到我的答案。

我正在做和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,但我得到一个exception,如“连接,但注册超时”

我试过weberknecht我得到一个“错误,同时创build套接字ws://184.xxxxxx:8080”

我尝试了TooTallNate ,没有运气,只是调用onClose方法。

我试过jWebSocket,但我不能得到它的工作…

所以我在这里,寻求帮助,有没有人知道如何做到这一点? 有什么build议?

PS TooTallNate我使用这样的东西:

 Net net = new Net(new URI("ws://184.xxxxxx:8080"),WebSocketDraft.DRAFT76); 

问题可能在这里吗?

更新:我处理了这个! 经过一个良好的睡眠,我有了这个想法,我使用socket.io,坏主意…现在我使用节点Websocket服务器与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的当前实现。

作为一个侧面说明,如果你不想托pipe自己的websocket服务器,你可以看看使用Pusher.com,他们实际上是我的雇主。

[更新]至于websocket是否是您的应用程序最适合的技术select,是您的应用程序需要什么types的数据和交互的问题。 在移动设备上,如果您只是发送推送通知,则最好使用像urbanairship或notifio这样的内容。

问候,米歇尔·史密斯

就像Raynos所说的websocket规范仍然是一个草案(变化)。 也许你可以问Guillermo Rauch(作者socket.io)他正在使用哪个草稿,并find适当的Websocket库。 在他的github页面上,你可以find他的电子邮件地址,并尝试给他发一封电子邮件(简称)。

你也可以尝试使用另一个传输(长轮询),并实现自己猜我自己。

但在我看来,您应该使用Google的c2dm (大玩家已经在使用这个function,并且会非常轻松地将您的手机的电池),而不是将更新推送到手机实时。 我已经有很多使用c2dm的应用程序,例如whatsapp (awesome)。 你可以使用notifo的api来简化你的工作。 然后只需安装那里的android程序来接收所需的通知。 还有一个节点模块(npm)可供您使用(简单:))

我build议

  • Android: https : //github.com/stellaeof/java-websocket-client
  • 节点Websockets:http://static.brandedcode.com/nws-docs/