我想在我的网站中添加在线或离线功能,它是基于PHP Codeigner框架构建的。
我在OnlineUsers0.2上找到了这个库。但是,我已经在使用内置的会话类,我也想在网上使用它。
我的想法是在ci_sessions
表中插入一个具有用户id的其他字段,当我显示用户信息时,如果用户id存在于ci_sessions
表中,并且last_activity
比用户联机时间短5分钟,如果不存在,或者last_activity
比用户脱机时间长5分钟,我会根据用户id对该表进行检查。
所以,我的第一个问题是如何将user_id
字段添加到ci_sessions
表中,这是一个好方法吗。
我的第二个问题是,有没有更好的方法来做我想要的事情?
在回答第二个问题时,您可以轻松地使用javascript websocket实时执行此操作。您也可以使用相同的逻辑进行长轮询,但如果您的应用程序有很多用户,这不是一个好方法。
实时在线功能只需在用户表中创建一列"is_online",然后编写一个函数来更新数据库中的is_onle状态标志。
使用创建websockets-php服务器http://socketo.me/或https://github.com/nekudo/php-websocket。您的服务器逻辑将驻留在这里,即如果用户联机,则更新联机标志,反之亦然。
在使用websockets的javascript中,您可以简单地挂接onopen和onclose事件来执行触发服务器端的功能。当用户点击您的任何页面时,只需更新数据库中的状态即可。
function WebSocketTest()
{
if ("WebSocket" in window)
{
alert("WebSocket is supported by your Browser!");
// Let us open a web socket
var ws = new WebSocket("ws://localhost:9998/echo");
ws.onopen = function()
{
// Web Socket is connected, send data using send()
ws.send("Message to send");
alert("Message is sent...");
};
ws.onclose = function()
{
// websocket is closed.
alert("Connection is closed...");
};
}
else
{
// The browser doesn't support WebSocket
alert("WebSocket NOT supported by your Browser!");
}
}
进一步参考http://www.tutorialspoint.com/html5/html5_websocket.htm