criyle / go-judge

Sandbox Server in REST / gRPC API. Based on Linux container technologies.
MIT License
419 stars 67 forks source link

使用gRPC接口传输数据时,限制消息大小4MB #96

Closed Hiworle closed 7 months ago

Hiworle commented 8 months ago

在使用grpc方式调用go-judge服务器的exec接口时,出现异常:

io.grpc.StatusRuntimeException: RESOURCE_EXHAUSTED: grpc: received message larger than max (7100036 vs. 4194304)
    at io.grpc.stub.ClientCalls.toStatusRuntimeException(ClientCalls.java:268)
    at io.grpc.stub.ClientCalls.getUnchecked(ClientCalls.java:249)
    at io.grpc.stub.ClientCalls.blockingUnaryCall(ClientCalls.java:167)

这似乎是由于创建grpc server时未指定消息大小导致的,添加配置后正常:

image

https://github.com/criyle/go-judge/compare/master...Hiworle:go-judge:master

我对golang不甚了解,有错误的地方还请指正。

criyle commented 8 months ago

确实是有一个默认的 4M 限制,但是通常使用情况应该不太会逼近这个限制,例如输入文件在磁盘上用路径来引用的时候。如果这个限制调整是必要的,比如需要传入用户提供的大输入,那么一个武断的 64M 限制可能缺乏灵活性,更好的方案应该是一个 64M 默认值的命令行参数传入以提供更好的可调整性适应可能的变化。