3
回答
求助两个关于websocket通信的问题
【腾讯云】学生服务器套餐10元/月 >>>   

使用websocket协议进行客户端与服务端之间的通信,遇到如下2个问题:

1.如何保证通信的安全性,包括连接的安全性以及传输信息的安全?

2.如何实现服务端与客户端之间的连接保活(keep-alive)机制来确保通信畅通?

望各位指点!

谢谢!

举报
mrZhan_223
发帖于4年前 3回/3K+阅
共有3个答案 最后回答: 4年前

 关于websocket的安全性,连接的安全性通过token来做,如果你去google一下,会发现一般都推荐这种做法。具体如下:

  • 在连接之前需要身份验证,可以通过servlet,验证成功后,生成token。将token写入cookie,或者返回给客户端。
  • 客户端打开连接时,带上token(如果是cookie的方式,服务端自己从cookie里面读取)。服务在openSession中判断token的合法性,如果非法,则关闭连接。

传输的安全性,通过wss(相当于https),google一下可以查到资料。或者可以使用上面的token,每次与客户端的消息通信中,都验证一次token。

Websocket的开发貌似并不需要自己去处理 keep-alive,这个不是很了解。用java写的websocket应用时不需要的~~


引用来自“ForEleven”的评论

 关于websocket的安全性,连接的安全性通过token来做,如果你去google一下,会发现一般都推荐这种做法。具体如下:

  • 在连接之前需要身份验证,可以通过servlet,验证成功后,生成token。将token写入cookie,或者返回给客户端。
  • 客户端打开连接时,带上token(如果是cookie的方式,服务端自己从cookie里面读取)。服务在openSession中判断token的合法性,如果非法,则关闭连接。

传输的安全性,通过wss(相当于https),google一下可以查到资料。或者可以使用上面的token,每次与客户端的消息通信中,都验证一次token。

Websocket的开发貌似并不需要自己去处理 keep-alive,这个不是很了解。用java写的websocket应用时不需要的~~


谢谢你的热心帮助,不过我还是有个问题,那就是我现在不是通过web的方式与server端进行通信,而是通过命令行的方式启动客户端与服务端通信,这样的话,哪有cookie、session之类的东西呢?

我说的keep-alive其实就是客户端与服务端心跳包的维护问题,通信程序要维持长连接都要在程序中维护这个心跳机制,所以也就是问的心跳机制该如何做?

因为在真实环境下通信,如果长时间没有消息往来,连接会被断开,因此必须要维护心跳包机制。

1. wss,和 https 的机制一样

2. 定时发 ping/pong,然后检测收到 pong 的时间戳就可以,websocket 协议有 ping/pong 的定义

顶部