2012-03-13 48 views
22

Tôi muốn bật liên lạc p2p dựa trên socket giữa hai hoặc nhiều máy chủ ứng dụng node.js khác nhau. Tôi đang sử dụng socket.io để xử lý tất cả các giao tiếp như vậy giữa một máy chủ cho trước và ứng dụng web mà nó phục vụ - nhưng những gì tôi đang tìm kiếm là một cách để giao tiếp máy chủ đến máy chủ.Có thể thiết lập ứng dụng khách socket.io đang chạy (phía máy chủ) trên máy chủ node.js không?

tôi đã bước đầu cho rằng nó sẽ được dễ dàng như một cái gì đó như thế này:

var io = require("socket.io"); 
var socket = io.connect("my remote endpoint"); 

Tuy nhiên, khi nó quay ra phía máy chủ socket.io thực hiện không cung cấp một phương pháp "kết nối", chỉ một phương pháp nghe.

Tại sao điều này? Tại sao tôi không thể xử lý một máy chủ ứng dụng nút như một máy khách đến một máy chủ socket.io đang chạy ở nơi khác? Có cách nào để tôi có thể đạt được chức năng này không?

+3

là thư viện khách hàng chỉ là những gì bạn đang sau? https://github.com/LearnBoost/socket.io-client – pimvdb

+0

Tôi có thể cắm nó vào ứng dụng node.js không? Làm cách nào để yêu cầu()? Nó được thiết kế để sử dụng dựa trên trình duyệt, theo như tôi có thể nói. – Myk

+0

Xem chủ đề này: http://stackoverflow.com/questions/6785979/socket-io-client-issues-require-socket-io-client-js-not-working – Myk

Trả lời

51

OK, vì vậy, nhờ @pimvdb trong các nhận xét ở trên, tôi đã có giải pháp khả thi.

Về cơ bản, thư viện socket.io cài đặt npm có phụ thuộc vào mô-đun khác, được gọi là socket.io-client. Trong cài đặt socket.io chuẩn, cài đặt này sẽ được cài đặt trong node_modules/socket.io/node_modules/socket.io-client

Tuy nhiên, cũng có thể nói "npm install socket.io-client" và cài đặt nó làm sở hữu thư viện công dân hạng nhất.

Sau đó, sử dụng của bạn trông như thế này:

var client = require("socket.io-client"); 
client.connect("http://myendpoint.com:3000/whatever"); 
client.emit("test", "foo"); 

Và mọi thứ hoạt động.

Vì vậy, cảm ơn người đàn ông!

+7

+1 để đăng giải pháp mà bạn đã tìm thấy – pimvdb

+9

'var client = require (" socket.io-client "); var socket = client.connect ("http: // localhost: 3000"); ổ cắm.phát ra ("test", "foo"); ' Điều này làm việc cho tôi. – nullbuilt

2

Trước khi bạn đi hết tốc độ trên socket.io để liên lạc giữa các máy chủ với máy chủ ..... socket.io được thiết kế như một trình duyệt đến cơ sở hạ tầng comm của máy chủ. Tôi xa chắc chắn nó là giải pháp tốt nhất cho các công cụ máy chủ P2P. Thêm vào đó, nếu bạn làm server-to-server - tại sao không chỉ làm Websockets? Có nhiều mô-đun websocket khác nhau cho nút - ví dụ: https://github.com/einaros/ws

+1

Tôi hiểu tất cả điều đó. Tình huống là tôi có một ứng dụng web dựa trên socket.io với giao tiếp nút <-> trình duyệt đã được thiết lập và toàn bộ API được tạo. Tôi muốn có thể quay lên một thể hiện cục bộ của node.js và kết nối nó với một Arduino, sau đó kết nối nó như một mục nữa trên phiên socket.io hiện có. Điều đó có ý nghĩa? – Myk

+0

Chắc chắn, âm thanh thú vị. Chúc may mắn. – Mark

6

Chỉ cần làm rõ, đây là một ví dụ với người nghe và khả năng phát ra sự kiện (và không có cài đặt lại một mô-đun đã được cài đặt)

var io = require('socket.io/node_modules/socket.io-client'); 

client = io.connect('http://'+CONFIG.host+':'+CONFIG.port); 

client.on('connect',function() { 
    client.emit("test","foo"); 
}); 
+0

Vì tôi mới vào ổ cắm.Những gì về xử lý yêu cầu này nếu trong client.emit ("kiểm tra", "foo") "foo" là một dòng và thử nghiệm là một blob, một cái gì đó như client.emit này ("blobs", dòng) để rõ ràng hơn tôi đang tìm kịch bản phía máy chủ (server.js) và thiết lập cổng thông tin để nghe trợ giúp !!? –

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