有没有人做过 Http, socket 混合服务器的

2017-06-26 09:38:30 +08:00
 abcbuzhiming
之前用 spring-mvc 做的 http 服务,现在需要实时推送,限于技术原因。不能使用 http2,本来打算用 websocket 的,但是发现一个问题,webscorket 在 java 下必须单独使用一个 servlet,不能和处理 http 请求的 servlet 复用,导致 session 等安全认证信息无法复用。于是就陷入僵局了,该如何改造现有这个系统?
6923 次点击
所在节点    Java
35 条回复
3dwelcome
2017-06-26 13:17:31 +08:00
我做过,但不是用 java。判断如果 socket 开始四个字节是"GET "或"POST",就走 http 服务器。如果不是,那么就走正常的 socket 二进制协议。
liuxu
2017-06-26 13:31:16 +08:00
你可以用 http server + workerman
如果要处理 session 同步问题,可以做一个内网用的接口给 workerman 查询

详细的你可以加他们官方群,群主以前也是 V2EX 玩的,技术厉害而且对新人的问题会很耐心的解答
QQ2171775959
2017-06-26 13:54:33 +08:00
用独立的服务器来做,性能比较能够满足的。
qieqie
2017-06-26 15:13:54 +08:00
websocket 就是为了直接复用 web infrastructure 搞出来的,
没道理不能复用,要不然和直接用 TCP 有什么区别
yuchting
2017-06-26 17:40:54 +08:00
我知道你们都是标准前后端的。
我歪个楼,我用的 Java + Netty 直接写底层 socket+http 协议,直接就混了。。。
z5864703
2017-06-26 17:44:21 +08:00
直接监听一个端口实现 websocket 和 http 服务,根据请求内容格式分发到对应业务逻辑,是可以实现的
notreami
2017-06-26 19:31:19 +08:00
为什么要用 session,而不是自行弄一个 token ?
abcbuzhiming
2017-06-26 21:32:51 +08:00
@notreami 因为已有的代码都是基于 session 的,搞个新的,你得把之前的代码全改了
azh7138m
2017-06-26 22:25:17 +08:00
@fzleee schema 不一样唉,一个 ws 一个是 http
hsmocc
2017-06-27 00:38:53 +08:00
没搞过 websocket,我也想知道权限如何控制的。搜了一下,ws 的 session 是可以关联页面中 httpsession 的,它们关联的时机是在 ws 握手的时候,因为 ws 的握手是通过 http 完成的。所以我感觉权限控制可以在 ws 握手时候,如果没有权限握手就失败。
cctrv
2017-06-27 00:42:51 +08:00
socket.io
正在使用,java 支持 https,不用 http2
raofeng
2017-06-27 11:29:42 +08:00
我们有个项目是这样搞的。网站用 Rails 4 + socket.io.js,然后 websocket 服务器用的 nodejs+socket.io+socket.io-emitter,session 是存在 redis 里边的。
在前端 js 里边连接 websocket 服务器的时候会把 session_id 传过去,然后 nodejs 这边就能读取到 session 的数据。
网站需要推送的时候用一个 Ruby Gem 包 emit 一下,就实现了推送。
colincat
2017-06-27 17:35:43 +08:00
可以复用,以前搞过,不过当时是基于 tomcat7 做的,session 也可以复用的
abcbuzhiming
2017-06-27 23:14:58 +08:00
@colincat 我遇到个新问题,你们当时在 tomcat 下做 websocket,是如何解决服务端超时检测这个问题的,即一段时间没有收到来自客户端的数据就断开。这个在别的 socket 实现下很简单的功能在 tomcat 下好难啊,放狗了两天,没找到肯定的答案
colincat
2017-06-28 11:09:18 +08:00
@abcbuzhiming 我们是自己做心跳啊,就可以判断超时

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/371055

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX