V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lbmjsls1
V2EX  ›  Java

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

  •  
  •   lbmjsls1 · 2020-06-20 08:09:43 +08:00 · 3614 次点击
    这是一个创建于 1377 天前的主题,其中的信息可能已经有所发展或是发生改变。

    场景:

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

    后台 web 服务器,php

    需求:

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

    其他猜想:

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

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

    要是实现的话,肯定是把 jar 包放到 tomcat 中吧?那意思是 tomcat 会把我的 jar 包运行起来,就像 java 运行起来一样。至于运行起来后我如何实现,就随意了是吧
    cnzjl
        4
    cnzjl  
       2020-06-20 08:41:49 +08:00
    可以合到一起,比如 WEB 开发使用 SpringBoot,然后 socket 使用 Netty
    Seney
        5
    Seney  
       2020-06-20 09:17:44 +08:00
    为什么不用 netty 呢 尤其是游戏服务器对网络要求蛮高的
    hantsy
        6
    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 给外部。
    Amance
        8
    Amance  
       2020-06-20 09:38:45 +08:00
    rpc 通信就行了
    hantsy
        9
    hantsy  
       2020-06-20 09:56:07 +08:00
    @cnzjl
    @Seney

    Spring Boot 整个 Webflux 体系,默认就是用 Netty (也可以换其它的服务器)运行,包含上面说的 RSocket 。
    RJH
        10
    RJH  
       2020-06-20 10:09:11 +08:00
    可以通过使用 MQ 或者共享数据库来实现三端通信
    opengps
        11
    opengps  
       2020-06-20 10:40:18 +08:00
    @lbmjsls1 刚才理解叉批了,我以为你说的 web 是浏览器端,看你后来意思应当是服务器端的 web,那就都可以用 socket 开发了,你可以用同样逻辑的 socket 核心进行不同位置的托管转发实现,具体实现方式就不用多说了,完全由你自己设计
    taogen
        12
    taogen  
       2020-06-20 11:29:32 +08:00 via Android
    Web server 是帮你将 TCP messages 转换为 HTTP messages,底层还是 socket 通信。
    原生的 socket 通信直接写个 Java 程序,创建 socket,监听端口,处理请求就行了。
    两个应用可以合并到一台服务器,只要服务器的资源吃得消就行。
    sagaxu
        13
    sagaxu  
       2020-06-20 11:49:46 +08:00 via Android
    Java web 跟普通 Java 没有区别
    micolore
        14
    micolore  
       2020-06-20 12:40:08 +08:00 via iPhone
    服务器高并发必然要用到 nio,netty 是首选,至于怎么结合,要看你们的系统架构了。
    jimrok
        15
    jimrok  
       2020-06-20 14:33:20 +08:00
    只要不是 raw socket,java 是可以搞的。raw socket 写 ping 这种代码需要发 icmp 的包,java 就搞不来了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2423 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 16:10 · PVG 00:10 · LAX 09:10 · JFK 12:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.