Java web 可以高并发支持原生 tcp socket 吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
lbmjsls1
V2EX    Java

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

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

    场景:

    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     Solana     3216 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 00:16 PVG 08:16 LAX 16:16 JFK 19:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86