Socket.io不向客户端发射

时间:2014-07-29 17:02:30

标签: node.js socket.io

我在局域网上运行我的网站,所以我可以在开发时测试它。它实际上是使用PHP作为服务器端脚本,NodeJS使用Redis和Socket.io将一些数据发送给客户端。

这就是server.js的样子:

var express =   require('express'),
http =      require('http'),
server =    http.createServer(app);

var app = express();

const redis =   require('redis');
const io =      require('socket.io');
// The server's redis client
const client =  redis.createClient();

server.listen(3000, '192.168.0.103');

io.listen(server).on('connection', function(socket) {

    const redisClient = redis.createClient();

    // The client's redis client
    redisClient.subscribe('ratings.upvote');
    redisClient.subscribe('followers.newFollower');

    redisClient.on('message', function(channel, message) {
        socket.emit(channel, message);
    });

    client.on('disconnect', function() {
        redisClient.quit();
    });
});

LAN上的服务器地址是192.168.0.103,这是我用来连接服务器的客户端javascript:

var socket = socketio.connect('192.168.0.103:3000');
socket.set('transports',
    [
        'websocket',
        'flashsocket',
        'htmlfile',
        'xhr-polling',
        'jsonp-polling'
    ]);
socket.set('origins', '*:*');

连接成功,我在浏览器的JS控制台中没有收到任何错误消息(NodeJS确认了这一点)。

我在同一台计算机上运行Redis,Nginx和NodeJS,而LAN上的其他每台计算机都可以http://192.168.0.103访问网络服务器。

修改

当只有服务器在我的本地计算机上运行且所有地址都设置为127.0.0.1时,Socket.io emit正在运行(仅限服务器)。

0 个答案:

没有答案