我想将JSON发送到套接字并使用JavaScript处理它。但不幸的是,JSON-Object并没有全部发送。在将对象data
写入输出流之后,服务器接收JSON-Object,而不是等待之后发生的任何事情。
我如何写插座
jsonGenerator.writeStartObject();
jsonGenerator.writeStringField("from", from);
jsonGenerator.writeObjectField("data", data);
jsonGenerator.writeEndObject();
服务器处理程序在某一时刻收到的内容
{"from":"me","data":{"one":1,"two":2}
正如您所看到的,最后}
未写入。如果我在data
字段之前写from
对象,服务器就会得到这个:
{"data":{"one":1,"two":2}
JSON对象的其余部分将被发送,但不会作为一个实体,这使得在服务器上难以解析。
JsonGenerator
就是这样创建的
JsonGenerator jsonGenerator = (new JsonFactory()).createGenerator(socket.getOutputStream());
jsonGenerator.setCodec(new ObjectMapper());
我怀疑它与编解码器设置有关。
服务器端
是一个简单的NodeJS,它记录来自套接字的数据。
net.createServer(function(socket) {
socket.on("data", function(data) {
console.log(data.toString());
});
}).listen(8080);
您可以在控制台中看到JSON-Object通过2个不同的事件发送。当我尝试解析data
时,它也会抛出错误,因为某些对象丢失了。
修改
我注意到有时它会发送整个JSON-Object,但是只发送一次20次,如果有的话。只发送字符串字段和数字字段可以完美地工作。
答案 0 :(得分:1)
我发现您必须调用flush()
或close()
才能缓冲部分数据。
从Javadoc for flush()
/**
* Method called to flush any buffered content to the underlying
* target (output stream, writer), and to flush the target itself
* as well.
*/
@Override
public abstract void flush() throws IOException;