Клиент Node.js для сервера socket.io

120

У меня работает сервер socket.io и соответствующая веб-страница с клиентом socket.io.js. Все нормально работает.

Но мне интересно, можно ли на другом компьютере запустить отдельное приложение node.js, которое будет действовать как клиент и подключаться к упомянутому серверу socket.io?

Предраг Стоядинович
источник
2
Как просмотреть ответ socket.emit ()?
codecowboy 06
1
Пройдите через github.com/LearnBoost/socket.io-client документации, я уверен , что она есть. Прошло какое-то время, поэтому я не помню, извините ...
Предраг Стоядинович
6
Это не работает, если io.connectфункция вызывается, как вы упомянули. Это должно называться:socket = io.connect('http://localhost:1337');
ceremcem

Ответы:

74

Это должно быть возможно с использованием Socket.IO-client: https://github.com/LearnBoost/socket.io-client

alessioalex
источник
8
Хм, я могу ошибаться, но это похоже на клиент, который работает в браузере. Мне нужен автономный клиент node.js.
Предраг Стоядинович
Я недавно не проверял, но в Node 0.4.x это тоже работало на сервере (я действительно реализовал это в прошлом проекте).
alessioalex
1
Я рад, что у вас получилось! Кстати, свой рабочий пример лучше поставить на вопрос, чем в отдельный ответ.
alessioalex
У меня это не установилось правильно на Windows 8 - я написал ошибку для этого
BT
@ PredragStojadinović: Не могли бы вы опубликовать свой код? Я хочу подключить один сервер NodeJS к другому. Можете ли вы помочь мне? Спасибо.
Pritam
43

Добавление примера для решения, приведенного ранее. Используя socket.io-client https://github.com/socketio/socket.io-client

Сторона клиента:

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

На стороне сервера:

//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');
});

Бегать :

Откройте консоль 2 и запустите node server.jsиnode client.js

AzizSM
источник
2
Замечательные примеры! Во-первых, на стороне клиента я не верю, что переменная «сокет» передается в событии соединения. Возможно, я ошибаюсь, но, похоже, именно такое поведение я наблюдаю с npm socket.io-client
Ryan S
8

После установки socket.io-client:

npm install socket.io-client

Вот так выглядит клиентский код:

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?' });

Спасибо, alessioalex .

Предраг Стоядинович
источник
0

Да, вы можете использовать любой клиент, если он поддерживается socket.io. Независимо от того, является ли его node, java, android или swift. Все, что вам нужно сделать, это установить клиентский пакет socket.io.

Сулеман Танвир
источник