我需要从node.js TCP服务器向许多TCP客户端发送JSON字符串.
为了从客户端的套接字/流中读取消息,我需要进行某种消息框架.一种方法是将消息的长度作为数组添加消息的长度 - 然后将其转换为客户端消息的缓冲区大小.
我如何在服务器上的node.js/javascript中执行此类操作,然后使用.NET客户端在客户端读取它?
鉴于此客户端代码,如何使用javascript/node在服务器端正确构建消息?
TcpClient client = new TcpClient(server, port);
var netStream = client.GetStream();
// read the length of the message from the first 4 bytes
byte[] b = new byte[4];
netStream.Read(b, 0, b.Length);
int messageLength = BitConverter.ToInt32(b, 0);
// knowing the length, read the rest of the message
byte[] buffer = new byte[messageLength];
netStream.Read(buffer, b.Length, buffer.Length);
var message = System.Text.Encoding.UTF8.GetString(buffer);
Run Code Online (Sandbox Code Playgroud)
要在nodejs中取消传入数据的框架,您可以尝试使用node-bufferlist或node-buffers ,或者手动创建自己的FSM并为其提供传入的数据块
服务器端更简单:
function sendPacket(stream, buffer)
{
var prefix = new Buffer(4);
var length = buffer.length;
var offset = 0;
// serialize 32bit little endian unsigned int
prefix[offset++] = length & 0xff;
prefix[offset++] = (length >> 8) & 0xff );
prefix[offset++] = (length >> 16) & 0xff );
prefix[offset++] = (length >> 24) & 0xff );
stream.write(prefix);
stream.write(buffer);
}
Run Code Online (Sandbox Code Playgroud)
或者您可以使用节点 v0.5+ buffer.writeUInt32
| 归档时间: |
|
| 查看次数: |
3330 次 |
| 最近记录: |