yii-node-socket对我不起作用

时间:2014-10-08 06:16:53

标签: php node.js sockets yii yii-extensions

最近,我一直在尝试将nodejs与现有项目集成,以确保Feed的实时更新。因此,我使用了以下yii插件并按照说明进行操作:

  

https://github.com/oncesk/yii-node-socket

主机和端口分别是:bigcat,3001,我已经在console.php和main.php中配置了它们。我启动了节点服务器,日志表明它正在收听:

Listening bigcat:3001
Set origin: bigcat:*

在我的客户端,我有以下代码(我将其创建为外部JavaScript):

// create object and connect to web socket server
var socket = new YiiNodeSocket(); 

socket.on('event.example', function () {
    console.log('*****Trigger test.event, is a global event, for all clients*****');
});

socket.onConnect(function () {
    socket.room('example').join(function (isConnected, numberOfRoomClients) {
        if (isConnected) {
            // catch test.event only for this rooom
            console.log('***Joined into room example: members count [' + numberOfRoomClients + ']*****');
            this.on('example.room.event', function (data) {
                 console.log('****WORKING****');
            });
        }
    });
});

我的控制台记录了客户端已成功连接。在homeController测试方法中,我有以下代码:

 $event = Yii::app()->nodeSocket->getFrameFactory()->createEventFrame();
 $event->setRoom('example');
 $event->setEventName('example.room.event');
 $event['type_string'] = 'hello world';
 $event['type_array'] = array(1, 2, 3);
 $event['type_object'] = array('one' => 1, 'two' => 2);
 $event['type_bool'] = true;
 $event['type_integer'] = 11;
 $event->send();

当我在另一个浏览器中调用homeController测试方法时,我的客户端应该能够监听该事件,并且控制台应该打印“IT工作”。但是,这种情况并没有发生。我的日志显示以下错误:

warn: handshake error INVALID SERVER: server host 127.0.0.1 not allowed for /server
debug: websocket writing 7::/server:undefined

服务器端代码似乎根本不起作用。我可以就如何完成它获得一些建议。我觉得我很亲密而又远。

server.config.js设置为:

module.exports = {
    host : 'bigcat',
    port : parseInt('3001'),
    origin : 'bigcat:*',
    allowedServers : ["127.0.1.1"],
    dbOptions : {"driver":"dummy","config":[]},
    checkClientOrigin : 1,
    sessionVarName : 'PHPSESSID'
};

1 个答案:

答案 0 :(得分:1)

我认为您需要在yii配置文件中添加127.0.0.1 - >节点套接字配置部分 - >参数是allowedServerAddresses

喜欢这个^

'nodeSocket' => array(
    'class' => 'application.extensions.yii-node-socket.lib.php.NodeSocket',
    'host' => 'localhost',  // default is 127.0.0.1, can be ip or domain name, without http
    'port' => 3001      // default is 3001, should be integer,
    <b>'allowedServerAddresses' => array('127.0.0.1')</b>
)

你能展示node-socket/lib/js/server/server.config.js配置文件吗?