安卓到节点.js通信

2022-09-01 16:13:57

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

我正在制作和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 Serverweberknecht 一起使用。服务器如下所示:

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();
}

答案 1

我是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,他们实际上是我的雇主。

[更新]至于websockets是否是最适合您的应用程序的技术选择,则取决于您的应用程序需要哪种类型的数据和交互。在移动设备上,如果您只是发送推送通知,则最好使用urbanairship或notifio之类的东西。

问候, 米歇尔·史密斯


答案 2

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

你也可以尝试使用另一个传输(长轮询)并自己实现规范

但在我看来,你应该使用谷歌的c2dm(大玩家已经在使用它,并且会非常温和地使用手机的电池)而不是实时推送手机更新。我已经安装了很多使用c2dm的应用程序,例如whatsapp(真棒)。您可以使用notifo的api来简化您的工作。然后只需安装Android程序即可接收所需的通知。还有一个节点模块(npm)可供您使用(易于:))


推荐