lbmjsls1
V2EX  ›  Java

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

  •  
  •   lbmjsls1 · Jun 20, 2020 · 4564 views
    This topic created in 2188 days ago, the information mentioned may be changed or developed.

    场景:

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

    后台 web 服务器,php

    需求:

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

    其他猜想:

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

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

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

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