相关疑难解决方法(0)

如何在node.js服务器上的PHP Web服务器和Socket.io之间创建握手?

我在服务器10.0.4.18上的端口8020上运行了node.js 4.0上的websocket.我使用socket.io v1.3,express和express-session实现了我的websocket.

项目定义

我需要能够在socket.io中为从PHP应用程序连接到它的每个用户创建一个会话.在用户发送第一个HTTP请求之后,我将使用将从PHP传递到socket.io以及HTTP请求的令牌对它们进行身份验证.

用户通过身份验证后,我需要在socket.io会话中保存一些个人数据,以便以后重用.每次用户刷新PHP应用程序时,socket.io都需要知道已创建的会话数据.

问题

每次用户重新加载/刷新PHP页面"他/她从哪里连接"时,会话数据都会丢失.服务器无法知道该连接属于先前创建的会话XYZ.

我不确定如何在PHP和node.js之间创建握手,其中两个服务器可以交换唯一数据以将socket.io会话绑定到.

仔细看看这个问题

我在浏览器中打开了这个链接https://10.0.4.18:8020/set/MikeA."这根据路由代码直接从node.js为我创建了一个会话"

然后我使用PHP连接到websocket,现在我可以看到会话没有问题!我能够在浏览器中打开多个选项卡,并且会按预期进行相同的会话.

它这次工作的原因是因为网址https://10.0.4.18:8020/set/MikeA建立了一个会话并将其绑定在我的浏览器和会话之间,从那里我能够从socket读取/写入我的会话.我使用express-socket.io-session包https://www.npmjs.com/package/express-socket.io-session.

但是如果我不手动使用url创建会话,则会话仅适用于一个页面加载.每次重新加载页面时,会话都会被破坏,就像它从未存在过一样!

当从socket.io连接时,我需要通过https://10.0.4.18:8020/set/MikeA连接到websocket时开发相同的行为.

如何在PHP服务器和socket.io之间建立握手,其中两个服务器可以在每次重新加载PHP页面或打开新的浏览器选项卡时将会话数据绑定到正确的用户?

这是我的websocket代码

var app = require('express')(),
    https = require('https'),
    fs = require('fs'),
    session = require('express-session'),
    sharedsession = require("express-socket.io-session"),
    fileStore = require('session-file-store')(session),
    base64url = require('base64url'),
    cookieParser = require("cookie-parser"),
    env = require('./modules/config');


var server = https.createServer(
    {
        key: fs.readFileSync('certs/key.pem'),
        cert: fs.readFileSync('certs/cert.pem')
    }, app).listen(env.socket.port, env.socket.host, function () {
    console.log('\033[2J');
    console.log('Websocket is running at https://%s:%s', server.address().address, server.address().port);
});

var io …
Run Code Online (Sandbox Code Playgroud)

javascript php node.js express socket.io

9
推荐指数
1
解决办法
2289
查看次数

标签 统计

express ×1

javascript ×1

node.js ×1

php ×1

socket.io ×1