0

我在我的 app.js 中使用 socket.io 并使用 express 框架对其进行配置,现在当我运行应用程序时,application 和 socket.io 都将启动,并且我可以在客户端和 app.js 之间发出消息。

app.js(服务器)

var express = require('express'),
    app = express(),
    http = require('http'),
    server = http.creatServer(app),
    socket = require('socket.io'),
    io = socket.listen(server);

server.listen(3000);    

io.sockets.on('connection', function(client){
    client.on('message', function(msg){
        io.sockets.emit('message', msg);
    });
});

客户:

<script type="text/javascript" src="/socket.io/socket.io.js"></script>
<script type="text/javascript">
    var server = io.connect('http://127.0.0.1:3000');
    server.emit('message', 'Hello World');
</script>

但我想在其他控制器中使用套接字......我使用“socket.io-client(https://npmjs.org/package/socket.io-client)”,现在我想获取从应用程序发出的消息。 js 到所有套接字。

控制器.js(服务器)

var io = require('socket.io-client'),
    socket = io.connect('127.0.0.1', {
        port: 3000
    });

socket.on('connect', function(){
    console.log('CONNECTED!!');
    socket.on('message', function(msg){
        console.log("New message:", msg);
    });
});

无法连接!

4

3 回答 3

0

您没有使用客户端套接字发出。io 是 socket.io 实例而不是连接的客户端套接字。

在服务器中

io.sockets.on('connection', function(client){
    client.on('message', function(msg){
      client.emit('message', msg);
  });
});

如果你需要广播,那么你可以使用 io 实例

io.socket.sockets.emit('message', msg);
于 2013-08-07T04:20:33.497 回答
0

如果您不在乎谁收到消息,您可以从 socket.io 进行全局广播。这在控制器内部有效。

于 2013-08-06T18:42:30.853 回答
0
var io = require('../socket/sio').initialize(server);
app.set('socketio', io)

在你的控制器中:

var io = req.app.get('socketio');
io.to(socketId).emit('sendData', data);
于 2018-11-24T11:41:37.783 回答