node.js - 如何从节点 js 服务器向客户端发送 json 数据?
问题描述
我有一个设备,它说以下几点它的 api 文档:
1. Use websocket protocol to communication,the websocket version is RFC6455 13,The default listen port is 7788,no TLS encrypt.
2. The data format use Json.you can use javascript to Serializer and Deserialize very easy.
3. All the key value of json use lower-char.the name or all chinese char use UTF8 encoded.
我正在创建 nodejs 应用程序作为该设备的服务器。
var net = require("net");
var server = net.createServer();
server.on("connection",function(socket){
socket.on("data",function(d){
console.log("Data from %s : %s", remoteAddress,d);
socket.write(
{
"cmd":"getuserlist",
"stn":true
}
);
});
});
server.listen(9000,function(){
console.log("Server listening to port %j", server.address());
});
正在连接设备。连接后,我将 json 数据发送到设备,根据文档,它还需要响应 json 数据,但它不起作用。请帮助我得到答复。此外,我需要通过解析 json 响应来调用 url。让我说清楚。
//If i get response like:
success:{
"count":40,
}
//I need to call an url like:
"http://example.com/40/"
我怎样才能实现它?
PS:我是 node.js 的新手
解决方案
上面提供的代码有几个问题:
remoteAddress
从未声明,但在日志语句中使用socket.write
仅接受字符串参数,因此您需要在发送 JS 对象之前对其进行字符串化您已指定需要在连接后将 JSON 数据发送到客户端(设备),但实际上您将其作为对客户端请求的响应发送。
- 您已指定“默认侦听端口为
7788
”,但您的服务器正在侦听端口9000
- 最后,您已指定通信协议
websocket-s
不是tcp-sockets
.
TCP 套接字的示例:
const net = require("net");
const server = net.createServer();
server.on("connection", function(socket) {
const remoteAddress = socket.remoteAddress;
socket.write(JSON.stringify({
cmd: "getuserlist",
stn: true
}));
socket.on("data", function(d) {
const data = JSON.parse(d);
console.log("Data from %s : %j", remoteAddress, data);
if (data.success && data.success.count == 40) {
// TODO: Call an url ...
}
});
});
server.listen(7788, function() {
console.log("Server listening to port %j", server.address());
});
您可以使用例如测试 tcp-servertelnet
$ telnet localhost 7788
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
{"cmd":"getuserlist","stn":true}
{"success": {"count": 40}}
Web 套接字示例:
npm i -S ws
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 7788 });
wss.on('connection', function (ws, req) {
const remoteAddress = req.connection.remoteAddress
ws.send(JSON.stringify({
cmd: "getuserlist",
stn: true,
}));
ws.on('message', function (d) {
const data = JSON.parse(d);
console.log("Data from %s : %j", remoteAddress, data);
if (data.success && data.success.count == 40) {
// TODO: Call an url ...
}
});
});
wscat
您可以使用(或也)测试 web-socket 服务器telnet
。
npm i -g wscat
$ wscat -c ws://localhost:7788
Connected (press CTRL+C to quit)
< {"cmd":"getuserlist","stn":true}
> {"sucess": {"count": 40}}
推荐阅读
- python - 通过比较 Python 中其他数组的数据来创建新数组
- java - JPA 中的 Bean 验证 API
- javascript - 在特定索引处添加数组项 - React Redux
- python - 预期 LP_LP_c_longlong 实例而不是指向 LP_c_longlong 的指针
- vue.js - 如何动态更新bootstrap-vue.js js表数据
- apache-beam-io - 使用 apache 2.19 的 bigquery 数据流上的 IllegalAccessError
- outlook-web-addins - Outlook web-addin 使用已注册的方案打开外部应用程序
- firebase - 为什么调度引发错误时我没有收到警报?
- spring-integration - 动态 url http-outbound-gateway 的动态超时
- excel-formula - 如何为以下创建 MS Excel 公式