php – 使用memcache进行棘轮会话数据同步
我创建了一个棘轮Web套接字服务器,并尝试使用SESSIONS.
在我的HTTP-Webserver(端口80)上的php文件中,我设置了这样的会话数据 use SymfonyComponentHttpFoundationSessionSession; use SymfonyComponentHttpFoundationSessionStorageNativeSessionStorage; use SymfonyComponentHttpFoundationSessionStorageHandlerMemcacheSessionHandler; $memcache = new Memcache; $memcache->connect('localhost',11211); $storage = new NativeSessionStorage(array(),new MemcacheSessionHandler($memcache)); $session = new Session($storage); $session->start(); $session->set('uname',$uname); 并使用Javascript连接到Ratchet Websocket服务器 var RatchetClient = { url: "ws://192.168.1.80:7070",ws: null,init: function() { var root = this; this.ws = new WebSocket(RatchetClient.url); this.ws.onopen = function(e) { console.log("Connection established!"); root.onOpen(); }; this.ws.onmessage = function(evt) { console.log("Message Received : " + evt.data); var obj = JSON.parse(evt.data); root.onMessage(obj); }; this.ws.onclose = function(CloseEvent) { }; this.ws.onerror = function() { }; },onMessage : function(obj) { },onOpen : function() { } }; Server脚本的工作原理如下所示: 如果客户端发送消息,我会获取会话数据 $memcache = new Memcache; $memcache->connect('localhost',11211); $session = new SessionProvider( new MyServer(),new HandlerMemcacheSessionHandler($memcache) ); $server = IoServer::factory( new HttpServer( new WsServer($session) ),7070 ); $server->run(); class MyServer implements MessageComponentInterface { public function onMessage(ConnectionInterface $conn,$msg) { $name = $conn->Session->get("uname"); } } 有用.如果我在连接到websocket之前设置会话数据,那么uname可以在我的套接字服务器脚本中使用. 每当我通过ajax或其他浏览器窗口更改会话数据时,我运行的客户端的会话数据将不会同步. 这意味着如果我更改uname或销毁会话,套接字服务器将无法识别这一点.似乎Ratchet在连接上读取会话数据一次,之后会话对象是独立的. 你能证实这种行为吗?或者我做错了什么.我认为使用memcache的目的是能够从不同的连接客户端访问相同的会话数据. 如果我在更改会话数据后重新连接到websocket,则数据已更新. 解决方法
是的,这就是它的工作方式. https://groups.google.com/d/topic/ratchet-php/1wp1U5c12sU/discussion (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |