Socket.io Yii2中一页的套接字io连接
我正在使用带有socket io和nodejs的Yii高级项目。 myserver.js位于yii2advanced/nodejs中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(
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
。现在它只附在项目/索引
页面上。::你得到答案了吗!这正是我所需要的,它的工作原理和你说的一模一样。谢谢分享!