我看到有两个类似的线程,但找不到答案。
我正在制作android应用,我想使用node作为服务器进行实时通信。
我真的无法使它正常工作。
可能我把很多事情弄错了,但我想尝试理解。
我的服务器很简单
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!"); });
并且可以正常工作…我通过网络应用程序尝试了此操作,然后就可以连接了。
但是我不能用java ..
我尝试了kryonet,但出现了类似“已连接但注册超时”的异常
我尝试使用weberknecht时遇到“在创建ws://184.xxxxxx:8080的套接字时出错”
我尝试了TooTallNate,没有运气,它只是调用onClose方法。
我尝试了jWebSocket,但无法正常工作…
所以我在这里寻求帮助,有人知道如何完成这项工作吗?有什么建议吗?
PS for 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无法工作的原因是由于每个服务器的实现。新创建将自动协商使用的正确草案,并且希望该草案能够对76和75草案达到90-100%的遵守率。
至于socket.io,我不能发表过多评论,但是我最后看的是,它的websocket实现相当差。
目前,我目前正在开发一个名为node-websocket- protocol的项目,socket.io,faye等将可以使用该项目,以便为他们提供真正可靠且合规的websocket实现。这还将替换版本2.0.0中的node- websocket-server中的当前实现。
附带说明一下,如果您不想托管自己的Websocket服务器,则可以使用Pusher.com,它实际上是我的雇主。
[更新]至于网络套接字是否是最适合您的应用程序的技术选择,则取决于应用程序需要哪种类型的数据和交互。在移动设备上,如果您只是发送推送通知,则最好使用城市飞艇或通知之类的工具。
问候,米歇尔·史密斯