nodejs 想要通过 tcp 交互怎么做来实现建立连接时带着参数 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
rizon
V2EX    程序员

nodejs 想要通过 tcp 交互怎么做来实现建立连接时带着参数

  •  
  •   rizon
    othorizon 2019-06-17 17:30:46 +08:00 2333 次点击
    这是一个创建于 2313 天前的主题,其中的信息可能已经有所发展或是发生改变。

    想要用 nodejs 开发一个后台服务,可以用 telnet 和 nc 这样的命令来通过 tcp 协议来交互。
    但是重点是,

    在通过 telnet 或 nc 请求后,可以直接带着一个参数到后台服务,后台服务可以直接根据参数来做不同的反馈,而不是在打开连接后,再从终端来交互的方式去传递参数。

    之所以想做这个是想要实现上传数据。
    客户端通过 cat file|nc locahost 8080,把数据传送到服务端,但是所有人都使用这个命令,我需要有一个参数来识别上传的数据的种类。
    我目前可以想到的就是对数据做一下处理:echo 'data'|xargs echo "data_type\n"|nc locahost 8080
    但是这太蠢了啊。。 求大佬支招


    或者是这个问题:TCP 协议能使用 url 这样的东西来区分不同的请求路径吗?后台根据不同 url 来做不同响应??

    也许这是个很蠢的问题哈,不耻下问哈,确实不太懂

    13 条回复    2019-06-18 17:41:54 +08:00
    ouyangbin81076
        1
    ouyangbin81076  
       2019-06-17 17:56:09 +08:00
    http 协议多好用,为什么要用 tcp,tcp 本身没有携带这种功能。
    而且你可以 curl 命令上传文件到 node 的 http 服务器来处理批量任务
    或者用
    cat file | while read line; do curl "localhost:8080/$line"; done;
    mango88
        2
    mango88  
       2019-06-17 17:56:21 +08:00
    ```
    在 tcp 连接建立之前, 应用程序是感受不到的

    类似于 url 参数 是在 tcp 连接建立之后,服务器根据应用层协议的不同做出的响应。

    你可以基于 nc 封装一层,比如:nc-example host port filepath fileType

    执行这个命令之后,程序发起 tcp 连接,完成与服务端握手。
    第一条信息可以发送文件类型,后面开始发送文件内容等等,这一般就称作应用层协议,需要自己协商定义
    ```
    rockyou12
        3
    rockyou12  
       2019-06-17 17:59:17 +08:00
    直接用 http 不就行了 ……而且 http2 非常快了,grpc 都是基于 http2 的
    rizon
        4
    rizon  
    OP
       2019-06-17 18:18:46 +08:00
    @ouyangbin81076 #1
    @rockyou12 #3
    说的也是啊,http 协议,也可以用过管道来传输流数据啊。唉 傻了。。

    @mango88 #2 嗯嗯谢谢哈 知道了
    rizon
        5
    rizon  
    OP
       2019-06-17 18:33:31 +08:00
    @ouyangbin81076 #1 并不可以啊,,curl 不能流的方式上传数据啊
    liuguang
        6
    liuguang  
       2019-06-17 18:37:17 +08:00
    tcp 定义好数据传输格式就好了,就像网游一样,都有规定好的数据结构、
    ouyangbin81076
        7
    ouyangbin81076  
       2019-06-17 18:58:05 +08:00
    @rizon
    curl localhost:8081 -F "file=@myfile" -X POST
    这个会以 multipart/form-data 方式上传文件,
    有个 -d 参数配合 cat xargs 也能上传,不过哪个碰到空格单引号之类的特殊字符很容易就 GG 了
    des
        8
    des  
       2019-06-17 19:00:48 +08:00 via Android
    @rockyou12
    纯 http 用 http2 还是不多的吧,大都是 https + http2
    没太明白这几个的关系,希望能懂
    rockyou12
        9
    rockyou12  
       2019-06-17 21:09:07 +08:00
    @des 理论上其实 http2 并不需要 tls,但基本实现都要求要用 tls。有些语言有无 tls 的 http2 实现,像 go 有个 h2c 就可以
    opengps
        10
    opengps  
       2019-06-17 21:28:42 +08:00
    建立连接只有个 remoteip 和 port,发个信息包识别出来才是有效通信
    des
        11
    des  
       2019-06-17 22:00:26 +08:00 via Android
    @rockyou12
    就是说的这个啊,无 tls 的 http2 根本没有多少支持,更何况 lz 问的是 nodejs
    rockyou12
        12
    rockyou12  
       2019-06-18 09:21:11 +08:00
    @des 哦?虽然我不做 nodejs 开发,但是查询文档还是会的,很明显 nodejs 官方就支持没有 tls 加密的 HTTP2,https://nodejs.org/api/http2.html#http2_http2_createserver_options_onrequesthandler
    julyclyde
        13
    julyclyde  
       2019-06-18 17:41:54 +08:00
    这是课本基础知识啊

    现在的人都不好好学习就出来写程序了吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2935 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 13:26 PVG 21:26 LAX 06:26 JFK 09:26
    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