【发布时间】:2020-11-30 15:10:24
【问题描述】:
我正在从事一个项目,我希望 Julia 服务器进程定期发布涉及一些二进制数据的消息。最初的客户端将用 javascript 编写,但我们最终希望能够拥有多个客户端,以各种方式实现。出于这个原因,我想使用协议缓冲区来定义消息。我发现了 3 个 Julia websocket 实现:WebSockets.jl、SimpleSockets.jl 和 HTTP.jl 的 WebSockets。我对WebSockets.jl 进行了一些天真的试验并得到了一个错误(“WebSockets 不支持字节 I/O”)。我的倾向是将注意力转移到HTTP.jl 实现上;我的印象是它的开发比WebSockets.jl 更积极。
更新:我继续我的实验。我被引导到以前的 SO 问题 unable to write binary data in websocket,这很有启发性。我在链接中建模了我的服务器实现,产生:
include("testmessage_pb.jl")
text = "A man spekith"
msg = TestMessage(someText=text)
function server(port)
@async HTTP.listen(Sockets.localhost, port) do http::HTTP.Stream
if HTTP.WebSockets.is_upgrade(http.message)
HTTP.WebSockets.upgrade(http, binary=true) do ws
while !eof(ws)
data = readavailable(ws)
IOExtras.startwrite(ws)
writeproto(ws, msg)
IOExtras.closewrite(ws)
end
end
end
end
end
运行它,我得到了一个与我报告的前一个非常相似的错误:
HTTP.WebSockets.WebSocket{HTTP.ConnectionPool.Transaction{Sockets.TCPSocket}} does not support byte I/O
我想知道阅读本文的人是否对这一特定技术集群(julia、protobuf、websockets)有任何经验,并就如何继续提出建议(“不要尝试”将被视为有用的反馈)。
【问题讨论】:
标签: websocket julia protocol-buffers