2011-06-27 31 views
24

Tôi thấy có một vài chủ đề tương tự nhưng tôi không thể tìm thấy câu trả lời của mình.Android đến giao tiếp node.js

Tôi đang tạo và ứng dụng android, tôi muốn sử dụng nút làm máy chủ để liên lạc trong thời gian thực.

Tôi thực sự không thể làm việc này.

Có lẽ tôi đang làm rất nhiều điều sai trái nhưng tôi muốn cố gắng hiểu.

Máy chủ của tôi cũng đơn giản như

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!"); 
}); 

và làm việc này ... Tôi cố gắng này với một ứng dụng web và tôi có thể kết nối.

Nhưng tôi không thể với java ..

tôi đã cố gắng kryonet nhưng tôi nhận được một ngoại lệ như "kết nối nhưng thời gian chờ đăng ký"

tôi đã cố gắng weberknecht tôi nhận được một "lỗi trong khi tạo ổ cắm để ws : //184.xxxxxx: 8080 "

Tôi đã thử TooTallNate, không may mắn, nó chỉ cần gọi phương thức onClose.

tôi đã cố gắng jWebSocket nhưng tôi không thể làm cho nó làm việc ...

Vì vậy, tôi đang ở đây, yêu cầu giúp đỡ, không ai biết làm thế nào để thực hiện điều này? Bất kì lời đề nghị nào?

P.S. cho TooTallNate Tôi đang sử dụng một cái gì đó như thế này:

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

có thể vấn đề là ở đây?

CẬP NHẬT: Tôi đã xử lý việc này! sau một giấc ngủ ngon tôi đã có ý tưởng, tôi đã sử dụng socket.io, ý tưởng tồi ... bây giờ tôi sử dụng Node Websocket Server với weberknecht. Các máy chủ trông như thế này:

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

và khách hàng:

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

Tôi tin rằng vấn đề là websocketdraft. Có 3 bản nháp nằm xung quanh, 76, 00 và 06. Socket.io là khá chảy máu cạnh với theo kịp với các bản thảo mới nhưng tôi nghi ngờ các thư viện Java của bạn. – Raynos

+1

nếu bạn đang sử dụng ứng dụng android làm ứng dụng khách thay vì trình duyệt thì không có điểm nào khi sử dụng ổ cắm web. websockets được tạo cho các thiết lập máy chủ/trình duyệt. – eggie5

Trả lời

10

Tôi là tác giả của nút-websocket-server (nws) và tôi khá chắc chắn lý do cho nút-websocket-server hoạt động và socket.io không, là do việc thực hiện của mỗi. NWS sẽ tự động thương lượng bản nháp phù hợp để sử dụng và nó cũng có hy vọng 90-100% tuân thủ các bản nháp của 76 và 75.

Vì tôi không thể nhận xét quá nhiều, nhưng cuối cùng Tôi đã xem, việc triển khai websocket đã được triển khai khá kém.

Tôi hiện đang làm việc trên một dự án tại thời điểm được gọi là giao thức node-websocket, có thể được sử dụng bởi socket.io, faye, v.v ... để cung cấp cho chúng triển khai websocket thực sự đáng tin cậy và tuân thủ. Điều này cũng sẽ thay thế việc triển khai hiện tại trong node-websocket-server trong phiên bản 2.0.0.

Lưu ý rằng, nếu bạn không muốn lưu trữ máy chủ websocket của riêng mình, bạn có thể xem bằng cách sử dụng Pusher.com, người thực sự là chủ nhân của tôi.

[Cập nhật] Để biết liệu websockets có phải là lựa chọn công nghệ thích hợp nhất cho ứng dụng của bạn hay không, đó là loại dữ liệu và tương tác mà ứng dụng của bạn cần. Trên thiết bị di động, tốt nhất bạn nên sử dụng thứ gì đó như urbanairship hoặc notifio nếu bạn chỉ gửi thông báo đẩy.

Kính trọng, Micheil Smith

+0

Rất cám ơn ý kiến ​​của bạn, biết tôi có cái nhìn tốt hơn về tình hình, dù sao ứng dụng của tôi là trò chơi và cần nhiều hơn một chút so với thông báo, cảm ơn đề xuất! – Duiker101

+0

Tôi sẽ đề xuất thư viện Android C2DM và hệ thống Thông báo iPhone, cá nhân. Tái phát minh bánh xe thường là một cơn đau đầu. – Paddy

+0

@Micheil Smith: Pusher thực sự cung cấp những gì nếu bạn có thể thiết lập máy chủ node.js và giao tiếp với nó từ Java chỉ với một vài dòng (như đã thấy ở trên trong câu hỏi)? – caw

2

Giống như Raynos nói spec WebSocket vẫn là một dự thảo (thay đổi). Có lẽ bạn có thể hỏi Guillermo Rauch (Author socket.io) bản thảo nào mà anh ta đang sử dụng và tìm thấy thư viện Websocket thích hợp. Tại his github page bạn có thể tìm thấy địa chỉ email của mình và cố gửi cho anh ấy một email (viết tắt).

Bạn cũng có thể thử sử dụng phương tiện khác (bỏ phiếu dài) và tự mình thực hiện spec. Tuy nhiên, theo ý kiến ​​của tôi, bạn nên sử dụng Google c2dm (Người chơi lớn đã sử dụng và sẽ rất nhẹ nhàng với pin điện thoại của bạn) thay vì để cập nhật điện thoại trong thời gian thực. Tôi đã có rất nhiều ứng dụng được cài đặt đang sử dụng c2dm như ví dụ whatsapp (tuyệt vời). Bạn có thể đang sử dụng notifo's api để đơn giản hóa công việc của mình. Sau đó, chỉ cần cài đặt there android program để nhận thông báo mong muốn.Ngoài ra còn có node module(npm) có sẵn để bạn sử dụng (dễ dàng :))

+1

Tôi khuyên bạn nên ping anh ấy vào # socket.io trên freenode thay vì email. – Raynos

+0

@Raynos thậm chí có thể tốt hơn (nhiều thời gian thực hơn). Những người từ đá learnboost :) – Alfred

Các vấn đề liên quan