如何将用户名从php会话存储到nodejs中的socket.io库和页面刷新时套接字连接断开。为啥?
Posted
技术标签:
【中文标题】如何将用户名从php会话存储到nodejs中的socket.io库和页面刷新时套接字连接断开。为啥?【英文标题】:How to store usernames from php session to socket.io library in nodejs and socket connection disconnects on page refresh.Why?如何将用户名从php会话存储到nodejs中的socket.io库和页面刷新时套接字连接断开。为什么? 【发布时间】:2017-05-02 06:18:08 【问题描述】:我正在为我的网络工作门户制作一个聊天应用程序。我曾经将用户名从 php 会话保存到 nodejs 套接字 io 库..我很困惑..可以在套接字对象中存储 10k 个用户。如果是,那么如何维护该用户列表?另一个问题是当用户从一个页面导航到另一个页面时..socket 断开连接并再次连接..它会影响我的应用程序性能或 nodejs 服务器的性能吗?
请通过教程或博客指导我..我还没有找到有关套接字连接管理的相关文档..提前谢谢!
【问题讨论】:
当用户导航到不同的页面时,客户端会自动关闭任何套接字。这是一种正常行为(“这是一项功能”)。 如何解决这个问题..在用户关闭浏览器然后断开连接之前,有什么方法可以处理套接字连接? 【参考方案1】:您可以将数据存储到socket
。
例如,
在服务器端,像这样使用,
var socketIo = require('/socket.io').listen(8080);
var usernames=[];
socketIo.sockets.on('connection', function (socket)
socket.on('storeUserData', function (data)
var userInfo = new Object();
userInfo.userName = data.userName;
userInfo.SocketId = socket.id;
usernames.push(userInfo);
);
socket.on('disconnect', function (data)
var len = usernames.length;
for(var i=0; i<len; i++)
var user = usernames[i];
if(user.socketId == socket.id)
usernames.splice(i,1);
break;
);
);
在客户端,你需要添加这个
<script>
var userName = <?php echo $_SESSION['userName'] ?>;
var socket = io.connect('http://localhost', port: 8080);
socket.on('connect', function (data)
socket.emit('storeUserData', 'userName' : userName );
);
</script>
刷新页面时套接字连接断开。为什么?
这是socket.io
的默认行为。
【讨论】:
可以为我的门户网站同时在 javascript 数组中存储 10k 用户名吗?有时它会给出最大堆栈超额错误? @GouravRathore;如果您有巨大的存储需求,您可以在后端使用数据库。即使你可以使用Redis
。
感谢您的好意...您能给我任何redis示例来存储用户数据或任何类型的教程或博客来阅读和理解..我是使用redis的新手.. .提前致谢!以上是关于如何将用户名从php会话存储到nodejs中的socket.io库和页面刷新时套接字连接断开。为啥?的主要内容,如果未能解决你的问题,请参考以下文章
NodeJS express - 如何在路由器内添加会话数据?
使用 NodeJS,如何使用 Spring Security OAuth2 制作的 JWT 检索存储在 PostgreSQL 中的会话信息?