Socket.io Yii2中一页的套接字io连接

Socket.io Yii2中一页的套接字io连接,socket.io,namespaces,yii2,Socket.io,Namespaces,Yii2,我正在使用带有socket io和nodejs的Yii高级项目。 myserver.js位于yii2advanced/nodejs中 var app = require('express')(); var server = require('http').Server(app); var io = require('socket.io')(server); var redis = require('redis'); var connectedUsers = {}; server.listen(

我正在使用带有socket io和nodejs的Yii高级项目。 myserver.js位于yii2advanced/nodejs中

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var redis = require('redis');
var connectedUsers = {};

server.listen(8890);

io.of('frontend/views/project/index').on('connection', function (socket) {

    socket.on('usersocket', function(data) {
        connectedUsers[data] = socket;
        console.log("new client with Id: " + data + " added to CLIENTS list");
    });
});
My client.js位于yii2advanced/frontend/web/js

$( document ).ready(function() { 
    var socket = io.connect('http://localhost:8890/frontend/views/project/index');

    socket.on('connect', function () {
        socket.emit('usersocket', user_id);
});
我需要允许套接字仅从frontend/views/project/index.php页面进行连接。 现在,套接字甚至可以从frontend/web/index.php进行连接
我遵循了socket文档中的一个示例(“将自己限制在名称空间内”),但我不确定是否正确指定了名称空间。

我已经解决了这个问题,如下所示

我为我的
项目/索引操作
创建了新的布局
project\u布局
(在此
操作
中的所有代码之前,我编写了
$this->layout='project\u布局';
)。 我创建了新的
AssetBundle
(ProjectAsset)。在这个
资产中
我写道:

public $js = ['js/client.js'];
在新的
布局中
我注册了新的
项目资产

use frontend\assets\ProjectAsset;
ProjectAsset::register($this);

所以,一个想法是只在您需要的页面上使用client.js。在此更改之前,我只有一个
主布局
用于所有
操作
。因此,在每一页上我都有一个
AppAsset
,附带
client.js
。现在它只附在
项目/索引
页面上。

::你得到答案了吗!这正是我所需要的,它的工作原理和你说的一模一样。谢谢分享!