想要用 nodejs 开发一个后台服务,可以用 telnet 和 nc 这样的命令来通过 tcp 协议来交互。
但是重点是,
在通过 telnet 或 nc 请求后,可以直接带着一个参数到后台服务,后台服务可以直接根据参数来做不同的反馈,而不是在打开连接后,再从终端来交互的方式去传递参数。
之所以想做这个是想要实现上传数据。
客户端通过 cat file|nc locahost 8080
,把数据传送到服务端,但是所有人都使用这个命令,我需要有一个参数来识别上传的数据的种类。
我目前可以想到的就是对数据做一下处理:echo 'data'|xargs echo "data_type\n"|nc locahost 8080
但是这太蠢了啊。。 求大佬支招
或者是这个问题:TCP 协议能使用 url 这样的东西来区分不同的请求路径吗?后台根据不同 url 来做不同响应??
也许这是个很蠢的问题哈,不耻下问哈,确实不太懂
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; |
2
mango88 2019-06-17 17:56:21 +08:00
```
在 tcp 连接建立之前, 应用程序是感受不到的 类似于 url 参数 是在 tcp 连接建立之后,服务器根据应用层协议的不同做出的响应。 你可以基于 nc 封装一层,比如:nc-example host port filepath fileType 执行这个命令之后,程序发起 tcp 连接,完成与服务端握手。 第一条信息可以发送文件类型,后面开始发送文件内容等等,这一般就称作应用层协议,需要自己协商定义 ``` |
3
rockyou12 2019-06-17 17:59:17 +08:00
直接用 http 不就行了 ……而且 http2 非常快了,grpc 都是基于 http2 的
|
4
rizon OP |
5
rizon OP @ouyangbin81076 #1 并不可以啊,,curl 不能流的方式上传数据啊
|
6
liuguang 2019-06-17 18:37:17 +08:00
tcp 定义好数据传输格式就好了,就像网游一样,都有规定好的数据结构、
|
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 了 |
8
des 2019-06-17 19:00:48 +08:00 via Android
|
9
rockyou12 2019-06-17 21:09:07 +08:00
@des 理论上其实 http2 并不需要 tls,但基本实现都要求要用 tls。有些语言有无 tls 的 http2 实现,像 go 有个 h2c 就可以
|
10
opengps 2019-06-17 21:28:42 +08:00
建立连接只有个 remoteip 和 port,发个信息包识别出来才是有效通信
|
11
des 2019-06-17 22:00:26 +08:00 via Android
@rockyou12
就是说的这个啊,无 tls 的 http2 根本没有多少支持,更何况 lz 问的是 nodejs |
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
|
13
julyclyde 2019-06-18 17:41:54 +08:00
这是课本基础知识啊
现在的人都不好好学习就出来写程序了吗? |