lbmjsls1
V2EX  ›  Java

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

  •  
  •   lbmjsls1 · Jun 20, 2020 · 5024 views
    This topic created in 2329 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
    watzds
    Jun 20, 2020 via Android
    1
    Java web 里也可以加 socket 处理啊,或者加 netty 都行
    opengps
    opengps
    Jun 20, 2020
    2
    socket 是依赖服务端程序的,web 端的那个 websocket 是多了信息头的。
    三端通信最终都是转发实现,并非都直接用在同一个集群里的同一套代码逻辑
    lbmjsls1
    lbmjsls1
    OP
    Jun 20, 2020
    3
    @watzds
    @opengps

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

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

    这个例子中,client 与 server 之间使用 tcp 通讯,为了方便测试,client 同时暴露了基于 HTTP 的 REST API 给外部。
    Amance
    Amance
    Jun 20, 2020
    8
    rpc 通信就行了
    hantsy
    hantsy
    Jun 20, 2020
    9
    @cnzjl
    @Seney

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