一个用于 socket.io 服务器的 Node.js 客户端。

135
我有一个正在运行的socket.io服务器和一个匹配的包含socket.io.js客户端的网页。一切正常。
但是,我想知道是否可能在另一台机器上运行一个单独的node.js应用程序,作为客户端连接到所提到的socket.io服务器?

2
我该如何查看socket.emit()的响应? - codecowboy
1
请查看 https://github.com/LearnBoost/socket.io-client 的文档,我相信答案在那里。已经有一段时间了,我记不清了,抱歉... - Predrag Stojadinović
6
如果按照您提到的方式调用io.connect函数,它将无法正常工作。正确的调用方式是:socket = io.connect('http://localhost:1337');请注意不要改变原意,并使翻译更加通俗易懂。 - ceremcem
7个回答

78

8
嗯,我可能错了,但这似乎是在浏览器内运行的客户端。我需要的是一个独立的node.js客户端。 - Predrag Stojadinović
我最近没有检查过,但在Node 0.4.x中,这也适用于服务器(我实际上已经在以前的项目中实现了这个)。 - alessioalex
2
很高兴它对你有用!顺便说一句,最好将你的工作示例放在问题中,而不是单独回答。 - alessioalex
这个在我的Windows 8上安装不正确 - 我为此写了一个错误报告。 - B T
@PredragStojadinović:您能否发布您的代码吗?我想将一个NodeJS服务器连接到另一个服务器。您能帮帮我吗?谢谢。 - Pritam
https://dev59.com/K14b5IYBdhLWcg3wchbs - exilonX

61

在之前给出的解决方案中添加示例。通过使用 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.jsnode client.js


3
太棒了的例子!不过,在客户端,我认为“socket”变量没有传递到连接事件。也许我错了,但这似乎是我在使用npm socket.io-client时看到的行为。 - Ryan S
你修好了吗,@RyanS? - Bombosonic
1
@Bombosonic 嘿!这是一段时间以前的事情了,哈哈,我不记得最终做了什么,抱歉! - Ryan S

14
安装完socket.io-client之后:
npm install socket.io-client

客户端代码如下:

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

感谢alessioalex


你能在等待套接字连接的情况下发出信号吗?我的信号发射失败,当我在.emit()之前查看socket.connected属性时,它是false - ekkis

2
const io = require('socket.io-client');
const socket_url = "http://localhost:8081";

let socket = io.connect(socket_url);

socket.on('connect', function () {
    socket.emit("event_name", {});
});

0

是的,只要它被socket.io支持,您可以使用任何客户端,无论是node、java、android还是swift。您所需要做的就是安装socket.io的客户端包。


0

类似这样的方法对我有用

const WebSocket = require('ws');
const ccStreamer = new WebSocket('wss://somthing.com');

ccStreamer.on('open', function open() {
  var subRequest = {
    "action": "SubAdd",
    "subs": [""]
  };
  ccStreamer.send(JSON.stringify(subRequest));
});

ccStreamer.on('message', function incoming(data) {
  console.log(data);
});

0
客户端代码:我有一个需求,我的nodejs web服务器既可以作为服务器,也可以作为客户端工作,因此当我需要它作为客户端时,我添加了以下代码。它应该可以正常工作,我正在使用它并且对我来说运行良好!
const socket = require('socket.io-client')('http://192.168.0.8:5000', {
            reconnection: true,
            reconnectionDelay: 10000
          });
    
        socket.on('connect', (data) => {
            console.log('Connected to Socket');
        });
        
        socket.on('event_name', (data) => {
            console.log("-----------------received event data from the socket io server");
        });
    
        //either 'io server disconnect' or 'io client disconnect'
        socket.on('disconnect', (reason) => {
            console.log("client disconnected");
            if (reason === 'io server disconnect') {
              // the disconnection was initiated by the server, you need to reconnect manually
              console.log("server disconnected the client, trying to reconnect");
              socket.connect();
            }else{
                console.log("trying to reconnect again with server");
            }
            // else the socket will automatically try to reconnect
          });
    
        socket.on('error', (error) => {
            console.log(error);
        });

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接