Klient Node.js dla serwera socket.io

120

Mam uruchomiony serwer socket.io i pasującą stronę internetową z klientem socket.io.js. Wszystko działa dobrze.

Ale zastanawiam się, czy jest możliwe, aby na innym komputerze uruchomić oddzielną aplikację node.js, która działałaby jako klient i łączyła się ze wspomnianym serwerem socket.io?

Predrag Stojadinović
źródło
2
Jak wyświetlić odpowiedź z socket.emit ()?
codecowboy,
1
Przejdź przez github.com/LearnBoost/socket.io-client dokumentacji, jestem pewien, że tam jest. Minęło trochę czasu, więc nie pamiętam, przepraszam ...
Predrag Stojadinović
6
Nie działa, jeśli io.connectfunkcja jest wywoływana, jak wspomniałeś. Powinien nazywać się:socket = io.connect('http://localhost:1337');
ceremonia

Odpowiedzi:

74

Powinno to być możliwe przy użyciu klienta Socket.IO: https://github.com/LearnBoost/socket.io-client

alessioalex
źródło
8
Uhm, mogę się mylić, ale wygląda to na klienta działającego w przeglądarce. Potrzebuję samodzielnego klienta node.js.
Predrag Stojadinović
Nie sprawdzałem ostatnio, ale w Node 0.4.x działało to również na serwerze (zaimplementowałem to w poprzednim projekcie).
alessioalex
1
Cieszę się, że ci się udało! Przy okazji, lepiej jest przedstawić swój roboczy przykład na pytaniu niż w osobnej odpowiedzi.
alessioalex
To nie zainstalowało się poprawnie dla mnie w systemie Windows 8 - napisałem dla niego błąd
BT
@ PredragStojadinović: Czy możesz wysłać swój kod? Chcę podłączyć jeden serwer NodeJS do drugiego. Czy możesz mi pomóc? Dzięki.
Pritam
43

Dodając przykład do rozwiązania podanego wcześniej. Korzystając z socket.io-client https://github.com/socketio/socket.io-client

Strona klienta:

//client.js
var io = require('socket.io-client');
var socket = io.connect('http://localhost:3000', {reconnect: true});

// Add a connect listener
socket.on('connect', function (socket) {
    console.log('Connected!');
});
socket.emit('CH01', 'me', 'test msg');

Po stronie serwera :

//server.js
var app = require('express')();
var http = require('http').Server(app);
var io = require('socket.io')(http);

io.on('connection', function (socket){
   console.log('connection');

  socket.on('CH01', function (from, msg) {
    console.log('MSG', from, ' saying ', msg);
  });

});

http.listen(3000, function () {
  console.log('listening on *:3000');
});

Biegać :

Otwórz 2 konsole i uruchom node server.jsinode client.js

AzizSM
źródło
2
Niesamowite przykłady! Jedna rzecz, po stronie klienta nie wierzę, że zmienna „gniazdo” jest przekazywana w zdarzeniu połączenia. Może się mylę, ale wydaje mi się, że jest to zachowanie, które widzę w przypadku npm socket.io-client
Ryan S
8

Po zainstalowaniu socket.io-client:

npm install socket.io-client

Tak wygląda kod klienta:

var io = require('socket.io-client'),
socket = io.connect('localhost', {
    port: 1337
});
socket.on('connect', function () { console.log("socket connected"); });
socket.emit('private message', { user: 'me', msg: 'whazzzup?' });

Dzięki alessioalex .

Predrag Stojadinović
źródło
0

Tak, możesz używać dowolnego klienta, o ile jest obsługiwany przez socket.io. Bez względu na to, czy jest to węzeł, Java, Android czy Swift. Wszystko, co musisz zrobić, to zainstalować pakiet klienta socket.io.

Suleman Tanveer
źródło