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

2019-06-17 17:30:46 +08:00
 rizon

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

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

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


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

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

1931 次点击
所在节点    程序员
13 条回复
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
2019-06-17 17:56:21 +08:00
```
在 tcp 连接建立之前, 应用程序是感受不到的

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

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

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

@mango88 #2 嗯嗯谢谢哈 知道了
rizon
2019-06-17 18:33:31 +08:00
@ouyangbin81076 #1 并不可以啊,,curl 不能流的方式上传数据啊
liuguang
2019-06-17 18:37:17 +08:00
tcp 定义好数据传输格式就好了,就像网游一样,都有规定好的数据结构、
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
2019-06-17 19:00:48 +08:00
@rockyou12
纯 http 用 http2 还是不多的吧,大都是 https + http2
没太明白这几个的关系,希望能懂
rockyou12
2019-06-17 21:09:07 +08:00
@des 理论上其实 http2 并不需要 tls,但基本实现都要求要用 tls。有些语言有无 tls 的 http2 实现,像 go 有个 h2c 就可以
opengps
2019-06-17 21:28:42 +08:00
建立连接只有个 remoteip 和 port,发个信息包识别出来才是有效通信
des
2019-06-17 22:00:26 +08:00
@rockyou12
就是说的这个啊,无 tls 的 http2 根本没有多少支持,更何况 lz 问的是 nodejs
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
2019-06-18 17:41:54 +08:00
这是课本基础知识啊

现在的人都不好好学习就出来写程序了吗?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/574800

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX