Java web 可以高并发支持原生 tcp socket 吗

2020-06-20 08:09:43 +08:00
 lbmjsls1

场景:

java 游戏服务器,原生 socket 通信

后台 web 服务器,php

需求:

能否把这两个服务器合并到一起

其他猜想:

比如原来的微信或是 qq,有手机端,pc 端,web 端,服务端是如何架构可以让这三端通信的

3849 次点击
所在节点    Java
15 条回复
watzds
2020-06-20 08:33:48 +08:00
Java web 里也可以加 socket 处理啊,或者加 netty 都行
opengps
2020-06-20 08:33:57 +08:00
socket 是依赖服务端程序的,web 端的那个 websocket 是多了信息头的。
三端通信最终都是转发实现,并非都直接用在同一个集群里的同一套代码逻辑
lbmjsls1
2020-06-20 08:41:36 +08:00
@watzds
@opengps

要是实现的话,肯定是把 jar 包放到 tomcat 中吧?那意思是 tomcat 会把我的 jar 包运行起来,就像 java 运行起来一样。至于运行起来后我如何实现,就随意了是吧
cnzjl
2020-06-20 08:41:49 +08:00
可以合到一起,比如 WEB 开发使用 SpringBoot,然后 socket 使用 Netty
Seney
2020-06-20 09:17:44 +08:00
为什么不用 netty 呢 尤其是游戏服务器对网络要求蛮高的
hantsy
2020-06-20 09:24:43 +08:00
可以啊,Spring 已经支持 RSocket 规范,支持 TCP,Websocket 等协议。游戏开发就更适合 RSocket 这种协议了。

eg. https://github.com/hantsy/rsocket-sample/tree/master/crud

这个例子中,client 与 server 之间使用 tcp 通讯,为了方便测试,client 同时暴露了基于 HTTP 的 REST API 给外部。
hantsy
2020-06-20 09:29:30 +08:00
Amance
2020-06-20 09:38:45 +08:00
rpc 通信就行了
hantsy
2020-06-20 09:56:07 +08:00
@cnzjl
@Seney

Spring Boot 整个 Webflux 体系,默认就是用 Netty (也可以换其它的服务器)运行,包含上面说的 RSocket 。
RJH
2020-06-20 10:09:11 +08:00
可以通过使用 MQ 或者共享数据库来实现三端通信
opengps
2020-06-20 10:40:18 +08:00
@lbmjsls1 刚才理解叉批了,我以为你说的 web 是浏览器端,看你后来意思应当是服务器端的 web,那就都可以用 socket 开发了,你可以用同样逻辑的 socket 核心进行不同位置的托管转发实现,具体实现方式就不用多说了,完全由你自己设计
taogen
2020-06-20 11:29:32 +08:00
Web server 是帮你将 TCP messages 转换为 HTTP messages,底层还是 socket 通信。
原生的 socket 通信直接写个 Java 程序,创建 socket,监听端口,处理请求就行了。
两个应用可以合并到一台服务器,只要服务器的资源吃得消就行。
sagaxu
2020-06-20 11:49:46 +08:00
Java web 跟普通 Java 没有区别
micolore
2020-06-20 12:40:08 +08:00
服务器高并发必然要用到 nio,netty 是首选,至于怎么结合,要看你们的系统架构了。
jimrok
2020-06-20 14:33:20 +08:00
只要不是 raw socket,java 是可以搞的。raw socket 写 ping 这种代码需要发 icmp 的包,java 就搞不来了。

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

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

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

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

© 2021 V2EX