Json 基于Websocket的应用程序、安全性和实时性良好实践?

Json 基于Websocket的应用程序、安全性和实时性良好实践?,json,node.js,security,websocket,real-time,Json,Node.js,Security,Websocket,Real Time,我正在使用websocket为我的移动应用程序项目进行实时通信。我实现了基本的安全逻辑: 要连接到服务器,客户端必须具有密钥 -当客户端连接到服务器时,它会立即发送一个包含身份验证信息的JSON对象 { action:"auth", device_id: "string", auth_key: "string", user: "string" } -如果密钥正确,服务器将使用会话id进行回复,或者断开连接 -由此,客户端发送的每个数据都将是具有该会话id的JSO

我正在使用websocket为我的移动应用程序项目进行实时通信。我实现了基本的安全逻辑: 要连接到服务器,客户端必须具有密钥

-当客户端连接到服务器时,它会立即发送一个包含身份验证信息的JSON对象

{
    action:"auth",
    device_id: "string",
    auth_key: "string",
    user: "string"
}
-如果密钥正确,服务器将使用会话id进行回复,或者断开连接 -由此,客户端发送的每个数据都将是具有该会话id的JSON对象,以便服务器能够识别它,所有未知的客户端都将被丢弃

现在最大的问题是,WebSocket协议不理解JSON,所以我必须使用JSON.stringify()和JSON.parse()来发送数据,还必须检查会话id是否有效。这需要时间,而且应用程序不再平滑(之前)

例如,如果它记录了鼠标指针的移动,这些数据将在鼠标移动时发送到服务器,因此它会在短时间内多次发送数据, 因为我实现的逻辑,它一点也不平滑

{
    session_id: "string",
    user: "string"
    action:"mousemove",
    position:  {
        x: int, 
        y: int 
    }
}
我关注的是:

-保护服务器,使任何人都无法在未经授权的情况下访问服务器和发送命令

-保持实时性


-拥有良好的数据格式(如有可能,使用JSON)

要真正确保通信安全,您需要使用TLS连接。 你对用户身份验证所做的事情看起来没问题

但奇怪的是,身份验证时间对您来说是个问题,您可能需要实现会话缓存,以加快会话id验证

从大小的角度来看,JSON不是网络数据传输的最佳格式,但是WebSocket规范没有指定格式,使用什么取决于您,JSON也可以,除非您真正关心流量节约


为了使通信顺畅,您可以在客户端聚合数据,例如每秒发送一次数据。我相信你实际上不需要这么多鼠标坐标。

JSON将是完美的,如果我不需要对它进行编码和解码的话。然而,鼠标移动命令一个指针(红点),所以每秒发送一个指针,这将非常糟糕,所以我需要它是实时的。如何实时,鼠标移动事件每秒触发数百次,你真的需要这么多请求吗?看,如果我在一台计算机上画一条线,我想在远程计算机上画同一条线,如果它不够快,远程用户将不得不等待它,这是令人不快的,更糟糕的是,我开始画其他东西,在它完成在远程计算机上渲染之前TLS是否涉及身份验证?我的意思是,如果我使用TLS,我就不必自己处理身份验证过程了?;还是对数据进行加密,使其在嗅探网络时看不清?尝试将请求量减少到每100毫秒一个,这可能会有所帮助,但仍然是相当实时的